c – 等号是否会对括号初始化产生影响?例如. ‘T a = {}’vs’T a {}’
作者:互联网
以下是在C 11中初始化变量的两种方法:
T a {something};
T a = {something};
我在所有可以想到的场景中测试了这两个,但我没有发现差异. This answer表明两者之间存在细微差别:
For variables I don’t pay much attention between the
T t = { init };
orT t { init };
styles, I find the difference to be minor and will at worst only result in a helpful compiler message about misusing an explicit constructor.
那么,两者之间有什么区别吗?
解决方法:
我所知道的唯一显着差异在于显式构造函数的处理:
struct foo
{
explicit foo(int);
};
foo f0 {42}; // OK
foo f1 = {42}; // not allowed
这类似于“传统”初始化:
foo f0 (42); // OK
foo f1 = 42; // not allowed
见[over.match.list] / 1.
除此之外,C 11中存在一个缺陷(见CWG 1270),只允许使用T a = {something}形式的大括号.
struct aggr
{
int arr[5];
};
aggr a0 = {1,2,3,4,5}; // OK
aggr a1 {1,2,3,4,5}; // not allowed
标签:list-initialization,c,c11,initialization 来源: https://codeday.me/bug/20190928/1828029.html