[英]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.