直接初始化与拷贝初始化学习笔记
2006-11-10 10:21
295 查看
[说明] 本文是根据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表达式采用的是直接初始化
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表达式采用的是直接初始化
相关文章推荐
- VS2010 C++ 学习笔记(四) 1.数据的封装 2.类外定义 3.构造函数(无参,有参,重载,初始化列表,拷贝) 4.练习
- Java学习笔记-构造器初始化
- Spring学习笔记-Bean初始化&销毁
- android菜鸟学习笔记.关于虚拟机里面的ubuntu 文件夹共享给windows XP的拷贝不出来的问题
- NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- Spring学习笔记--初始化和销毁Bean
- 学习笔记(JSJ-ServletConfig设置servlet初始化信息)
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之MFC程序的初始化过程
- Linux netfilter 学习笔记 之八 ip层netfilter的连接跟踪模块初始化
- python进阶学习笔记(五)——创建实例属性、初始化实例属性
- java编程思想学习笔记(5)--初始化与清理
- 深入Java虚拟机JVM类加载初始化学习笔记
- c++基础:拷贝初始化和直接初始化的误区
- 黑马程序员——Objective-C学习笔记(七) :初始化对象
- Java学习笔记——自动装箱、拆箱 & String初始化
- C++基础的不能再基础的学习笔记——拷贝控制(一)
- 【C++学习笔记】变量初始化规则
- 操作系统学习笔记(31)--初始化键盘
- Objective-C基础教程学习笔记(十)对象初始化
- java学习笔记3:对象的初始化顺序