您可以使用=初始化变量。例如:
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
那么,用=初始化和用{}初始化之间的区别是什么?
编辑:我的问题可能是也可能不是重复。我只是一个初学者,我甚至不理解可能原始问题的代码。我不是判断。即使它是重复的,我也无法理解该问题的任何答案。我觉得这个问题应该被视为一个原始的问题,因为我会理解简单的语言,而不是那个问题答案的某些高级词语。
答案 0 :(得分:7)
使用
=
初始化和使用{}
进行初始化有什么区别?
一般来说,区别在于前者为copy initialization,后者为direct - list initialization。链接的在线参考详细描述了所有三种初始化形式。特别是,你已经引用了不同之处;列表初始化不能用于缩小转换。
但即使使用
,右侧的代码也会丢失一些信息{}
右侧的程序格式不正确。
如上所述,该标准不允许在列表初始化的上下文中缩小conversions。 int
到char
是一个缩小的转化。
由于程序格式错误,标准不保证其行为,除了需要编译器发出诊断消息。例如,g ++ - 5.3.0会说:
warning: narrowing conversion of 'x' from 'int' to 'char' inside { } [-Wnarrowing]
请你详细说明&#34;形成错误的&#34;一部分?
标准说程序不能执行X.你的程序执行X.因此它违反了使程序格式错误的标准。这里,X是:
如果需要缩小转换(见下文)来转换任何参数,程序就会格式不正确。
左边的程序并不是格式错误。然而,就像右侧的程序一样,确实为char y
分配了char
类型无法表示的值(在char
是{{1}}的某些实现中,它可以表示无符号类型,但给定输出,看起来不是你的实现的情况)。当不可表示的值转换为有符号的类型时,结果值是实现定义的。