概念

变量定义指定了变量的类型和标识符,同时可以指定初始值。

指定了初始值的对象称为是已初始化的。

两种初始化方式:

  1. 复制初始化,语法上用=表达,如int i = 1;

  2. 直接初始化,语法上用()表达,如int i(1);

    主要为了保持与C的兼容

初始化与赋值的区别

初始化是指创建变量,并设置初始值的过程,是在变量定义语句中完成的,对一个变量来说,只会发生一次!

而赋值是在变量初始化之后,进行值改写的过程,可以多次操作!

复制初始化

相比直接初始化,不能使用explicit修饰的构造函数和类型转换函数

复制初始化会先根据重载决定机制,调用相应的构造函数创建一个该类型临时对象,然后再调用复制构造函数来初始化该对象,最后临时对象析构函数被调用。

但C++标准运行复制省略(copy elision),GCC默认开启该功能,可通过(-fno-elide-constructors)来关闭该功能。

如果复制构造函数有副作用时(执行次数影响了程序状态),复制省略会影响程序正确性!

直接初始化

直接根据重载决定机制调用相应的构造函数,或相应的类型转换函数

参考

  1. http://en.cppreference.com/w/cpp/language/copy_elision
  2. https://en.wikipedia.org/wiki/Copy_elision

留言