【发布时间】:2015-07-05 14:54:50
【问题描述】:
我已经养成了使用下面的直接列表初始化编写代码的习惯,因为它更有效,并且对于防止隐式 narrowing 非常有用:
int i {0};
string s {""};
char c {'a'};
bool b {false};
auto num {100}; // But this??
但是当谈到自动说明符时,我听说这样写它被认为是不好的或不推荐的,这是为什么呢?
【问题讨论】:
-
花括号周围有很多缺陷和怪异之处。例如。
int n; int & r { n };曾经被破坏。而auto x = { 1, 2 }退化为auto y = { 1 }可能会令人惊讶。基本上,花括号引入了很多不统一性,有些人认为不值得让读者混淆。 -
类型推导正是问题所在。花括号有许多不同的含义,您希望编译器在正确的站点上推断出您想要执行的操作,同时在左侧推断出您想要执行的操作的类型。这意味着如果推导在右侧有令人惊讶的结果(特别是因为编译器不知道您想要什么,因为没有已知的结果类型),左侧将自动接受结果并且没有检查会告诉您有问题.
-
如果标准委员会将元组文字放在核心语言中,这将不是什么大问题。
initializer_list的类型系统处理是一个糟糕的笑话。它会按照你的预期工作,除非它没有。
标签: c++ c++11 initialization auto type-deduction