您的位置:首页 > 编程语言 > C语言/C++

直接初始化与复制初始化

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 初始化