C++ 中数据初始化的不同方式

Different Ways of Data Initialisation in C++

我最近发现,在 C++ 中,我们可以使用不同的方式初始化整数,或者就此而言,在 C++ 中初始化其他原始数据类型。

第一个最熟悉的是:

int i = 50;       //initialised to 50
char c = 'a';     //initalised to 'a'
//And in similar way for all other data types

我最近认识的一个是这样完成的:

int i(50);       //initialised to 50
char c('a');     //initalised to 'a'

再试验一些,我还发现同样的事情也可以用 C++ 的另一种方式完成! 如下:

int i{50};       //initialised to 50 just as before
char c{'a'};     //initalised to 'a'...same again

这些也适用于 C++ 中的所有其他原始数据类型。现在我不禁想知道上面不同类型的数据初始化是否有任何可能的不同

  1. 一个比另一个更有效率吗?使用一种优于另一种有什么好处吗?
  2. 有没有一种情况比另一种更可取?
  3. 如果不是,为什么所有这些不同类型的初始化都是 假如?如果是,能否给出一些各有各用处的场景?

Is one more efficient than other?

没有

Is there any scenario where one is preferable over other?

花括号通常更可取,当它们是一个选项时,因为它们不允许缩小隐式转换,而这通常是无意的。

请注意,在 class 类型的情况下,大括号和圆括号会影响构造函数的分辨率。在这种情况下,更喜欢解析为您打算使用的构造函数的那些。

why all these different kinds of initialisation are provided?

  1. 向后兼容性
  2. 泛型编程(模板)