首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 直接初始化与拷贝初始化学习笔记
【标  题】:直接初始化与拷贝初始化学习笔记
【关键字】:
【来  源】:http://blog.csdn.net/SuperXu_swjtu/archive/2006/11/10/1376958.aspx

直接初始化与拷贝初始化学习笔记

[说明]   本文是根据Herb Sutter的《More Exceptional C++》条款36的精简翻译笔记,不明之处,参考原文。

1、直接初始化:使用单个构造函数(可能是转换构造函数)来初始化对象,形式如“T t(u)”。

2、拷贝初始化:使用拷贝构造函数来初始化对象,有必要的话会在此之前,先调用一个用户自定义的类型转换,形式如“T t=u”。

注意:一般而言,在变量初始化时,尽量采用直接初始化形式,而不是拷贝初始化。

3、分析下例中采用的初始化形式。

class T : public S {

public:

         T() : S(1), x(2) {}   //基类初始化与成员初始化

         X x;

};

 //////答案:基类与成员的初始化兜采用的是直接初始化。////////

T f( T t)   { return  t; }     //传递函数参数与返回值

/////答案:值的传递与返回都是采用的拷贝初始化。////////

S s;

T  t;

S& r = t;

reinterpret_cast< S& > (t);

dynamic_cast< T& > (r);

const_cast< const T& > (t);

//////答案:以上各种转换并没有涉及到新对象的产生,只是创建了引用而已。/////////

static_cast< S > (t);

///////答案:static_cast采用直接初始化。//////////

try { throw T(); }     //抛出异常

catch (T t) {}         //处理异常

//////答案:异常对象的抛出与捕获都采用拷贝初始化。////////

f( T(s) );    //函数风格的类型转换采用的是直接初始化

S a[3] = {1, 2, 3};   //大括号初始化语句采用的是拷贝初始化

S* p = new S(6);  //new表达式采用的是直接初始化

 

C++学习读书笔记-数组:【上一篇】
C++位运算,看高手都是运用的灵活自如,打算从今天开始学习他!:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 用python的ftplib模块编写ftp客户端程序的示例
  • win2k下asp+php+mysql+jsp+xsl+xml的安装
  • jstl标签注意问题
  • Delphi对象模型和接口指针分析
  • 区分继承和模板
  • 设计模式----Chain of Responsibility(职责链)模式
  • 手把手教你写批处理 三
  • 理解与应用LDAP服务器
  • linux中select()函数分析
  • WinCE 程序设计 (3rd 版)--2.3 位图
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.