繁体   English   中英

为什么在 C++ 中有不同的变量初始化方式?

[英]Why have different ways of variable initialization in C++?

自 2011 年修订 C++ 标准以来,可以通过以下三种不同方式初始化变量。

int i = 0;
int i (0);
int i {0};

据我所知,所有三种不同的初始化都具有相同的效果。 如果它们都具有相同的效果,为什么不像第一种那样坚持一种初始化方式呢? 是否有任何特殊需要通过将变量的初始值包围在 () 或 {} 中来初始化变量?

不允许这三者中的任何一个的原因是为了保持向后兼容性。

在生产中,有大量代码是用这三种方式中的每一种编写的。 如果要更改标准,则需要重写工作代码,从而导致成本和可能的错误。 由于 C++ 委员会对向后兼容性非常重视,我们最终陷入了这种情况。 它仍然比其他语言(如 Python)要好得多,从次要版本到次要版本,您需要重写代码以格式化字符串,或者从零循环到十。

如果您可以选择,请选择{0} ,它被称为统一初始化是有原因的:-)

这是一个历史问题。 第一个是int i=0; . 这个来自 1970 年代早期的 C 语言。 接下来的第一个 C++ 版本引入了一个类似于 function 的初始化语法,它在此处写入int i(0); . 但是由于最令人头疼的解析歧义,发明了花括号初始化。

出于兼容性原因,所有这些语法仍然有效......

int i = 0;
int i (0); //For backward compatibility
int i {0}; //Uniform Initialization

这三种类型的初始化是有区别的。

int i = 2.2;
int i (2.2);
int i {2.2};

首先,两个将进行隐式转换,但int i {0}; 将为您提供参数缩小的错误/警告。

有关初始化列表的详细信息,请查看此视频。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM