C++-初始化
概念
变量定义指定了变量的类型和标识符,同时可以指定初始值。
指定了初始值的对象称为是已初始化的。
两种初始化方式:
复制初始化,语法上用
=
表达,如int i = 1;
直接初始化,语法上用
()
表达,如int i(1);
主要为了保持与C的兼容
初始化与赋值的区别
初始化是指创建变量,并设置初始值的过程,是在变量定义语句中完成的,对一个变量来说,只会发生一次!
而赋值是在变量初始化之后,进行值改写的过程,可以多次操作!
复制初始化
相比直接初始化,不能使用explicit
修饰的构造函数和类型转换函数
复制初始化会先根据重载决定机制,调用相应的构造函数创建一个该类型临时对象,然后再调用复制构造函数来初始化该对象,最后临时对象析构函数被调用。
但C++标准运行复制省略(copy elision),GCC默认开启该功能,可通过(-fno-elide-constructors
)来关闭该功能。
如果复制构造函数有副作用时(执行次数影响了程序状态),复制省略会影响程序正确性!
直接初始化
直接根据重载决定机制调用相应的构造函数,或相应的类型转换函数