为什么有两种方法来初始化变量

why two ways to variable initialization

本文关键字:初始化 变量 方法 两种 为什么      更新时间:2023-10-16

为什么c++给出了两种初始化变量的方法?

第一种方法是C-type initialization,我们在定义变量的地方赋值。

int a = 0;

另一种方法是constructor initialization,它通过将初始值包含在括号()中来完成。

int a(0);

我的问题是,是什么原因迫使c++的创建者引入新的方法来初始化变量?

int a = 0;的存在是为了遗留(因为它感觉很自然,特别是对于内置类型),int a(0)的存在是为了显式性和一致性——在某些情况下,您可能需要一个更复杂的复制构造函数,它接受多个参数或其他类型的参数(转换构造函数)。

如果可以的话。如果有合适的构造函数可用),编译器将把int a = 0;int a(0)都视为对复制构造函数的调用。这里解释了精确的行为。

我认为这是因为具有初始化列表的构造函数通常更快,我认为与这样一个事实有关,即值可以在更少的内存访问操作中放入新分配的变量内存。这里有一个关于这个话题的CPP常见问题解答(顺便说一句,这是一个很好的网站)。

基本隐式是首选的方式:

int nValue = 5; // explicit initialization
int nValue(5); // implicit initialization

下面是一些读数:

http://www.learncpp.com/cpp-tutorial/21-basic-addressing-and-variable-declaration/

显式赋值与隐式赋值

当你使用第一种,也就是你所说的c类型初始化时,变量将被写入两次,第一次是默认值,第二次是赋值,对于第二种情况,它将被直接设置为指定值。我认为现代编译器对基本类型进行了优化,但对于对象来说,这可能会有很大的不同。