直接初始化与复制初始化
2014-04-14 13:41
375 查看
对于一般的内建类型,这两种初始化基本上没有区别。
当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后使用复制构造函数将那个临时对象复制到正在创建的对象。
例子:
Screen s1; // 使用默认构造函数初始化s1
Screen s2 = s1; // 隐式调用复制构造函数s2
Screen s3(s2); // 显示调用复制构造函数s3
同时,赋值和初始化也不同。
string str = "hello";
这是一个初始化。编译器首先调用接受一个C风格字符串形参的string构造函数(这个前提很重要,否则初始化会失败),产生一个临时对象,然后编译器调用string类的复制构造函数将str初始化为那个临时对象的副本。
x = y;
这是一个赋值操作,会调用复制运算符函数operator=。
总结:
初始化:建立一个新对象并赋初值。
赋值:在对象存在的前提下,删除旧值,赋予新值。
参考:
《C++ primer》 P407。
当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后使用复制构造函数将那个临时对象复制到正在创建的对象。
例子:
Screen s1; // 使用默认构造函数初始化s1
Screen s2 = s1; // 隐式调用复制构造函数s2
Screen s3(s2); // 显示调用复制构造函数s3
同时,赋值和初始化也不同。
string str = "hello";
这是一个初始化。编译器首先调用接受一个C风格字符串形参的string构造函数(这个前提很重要,否则初始化会失败),产生一个临时对象,然后编译器调用string类的复制构造函数将str初始化为那个临时对象的副本。
x = y;
这是一个赋值操作,会调用复制运算符函数operator=。
总结:
初始化:建立一个新对象并赋初值。
赋值:在对象存在的前提下,删除旧值,赋予新值。
参考:
《C++ primer》 P407。
相关文章推荐
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- 复制初始化和直接初始化的区别
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- 深入解释直接初始化与复制初始化的区别
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- C++直接初始化与复制初始化<一>
- C++直接初始化与复制初始化的区别深入解析
- 直接初始化和复制初始化
- C++类的直接初始化和复制初始化举例
- C++ 直接初始化和复制初始化
- 直接初始化与拷贝(复制)初始化
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- C++直接初始化和复制初始化
- 直接初始化 和 复制初始化 的细微差别
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- c++直接初始化和复制初始化 理解
- 深入解释直接初始化与复制初始化的区别
- C++误区——直接初始化和复制初始化
- 举例说明类 直接初始化VS复制初始化【未完待续】
- 直接初始化与复制初始化的区别