为什么两种方式变量初始化

时间:2015-09-25 09:02:14

标签: c++ variable-initialization

为什么C ++提供了两种初始化变量的方法?

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

int a = 0;

另一种方式,constructor initialization通过括起括号()之间的初始值来完成。

int a(0);

我的问题是,C ++的创建者被迫引入初始化变量的新方法的原因是什么。虽然C风格的初始化正在完成这项工作。

3 个答案:

答案 0 :(得分:1)

遗留存在

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

如果可以(即,如果适当的构造函数可用),编译器将同时将int a = 0;int a(0)视为对复制构造函数的调用。精确的行为解释为here

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

答案 1 :(得分:0)

基本上隐含的是首选方式:

int nValue = 5; // explicit initialization

int nValue(5); // implicit initialization

以下是一些读物:

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

Explicit Assignment vs Implicit Assignment

答案 2 :(得分:-4)

当你使用第一个,你称之为C型初始化时,变量将被写入两次,首先是默认值,第二次是赋值,而对于第二种情况,它将直接设置为指定值。我认为现代编译器会对原始类型进行优化,但对于对象来说,它可以产生很大的不同。