您可以使用=初始化一个变量。例如:用=初始化和用{}初始化有什么区别?
int a = 1000;
C++ 11引入了额外的记法{}。例如:
int a {1000};
根据编程:原理与实践由Bjarne Stroustrup的:
C++ 11引入的初始化表示法不法分子缩小转换。
我想看看这个很酷的功能。而我输入一段代码两次:
#include "std_lib_facilities.h" | #include "std_lib_facilities.h"
|
int main() | int main()
|
{ | {
int x = 254; | int x {254};
char y = x; | char y {x};
int z = y; | int z {y};
|
cout << "x = " << x << '\n' | cout << "x = " << x << '\n'
<< "y = " << y << '\n' | << "y = " << y << '\n'
<< "z = " << z << '\n'; | << "z = " << z << '\n';
|
} | }
左侧的代码使用=而右边使用{}代码
但是,即使使用后在右侧的代码失去了一些信息{}。因此,该输出是代码两件相同:
X = 254
Y =■
Z = -2
那么,什么是与=初始化之间的差并用{}初始化?
编辑:我的问题可能是也可能不是重复。我只是一个初学者,我甚至不理解可能原始问题的代码。我不是法官。即使它是重复的,我也无法理解这个问题的任何答案。我觉得这个问题应该被视为一个原创的问题,因为我会理解与该问题答案的某些高级词语相反的简单语言。
您确切地认为,在正确的例子中,“缩小转换”会失败吗?在你的机器上初始化'char'的正数大于'CHAR_MAX'? – DevSolar
'char'(在你的系统中)默认为'signed char'(但注意'signed char'!='char')。 '254'是一个有效的'char'(没有缩小转换,它的数值无关紧要),但是转换回为int,由于符号的原因你会得到它。要查看发生了什么变化,请尝试'unsigned char k = {260};'vs'unsigned char k = 260;' –
如果使用'gcc'添加'-Werror = narrowing'命令行选项来取消缩小转换。 –