我正在阅读C++11标准的第93页$5.1.2,其中提到在这种情况下使用花括号初始化列表是不合法的:
auto x=[]{return {1,2}}; //error: a braced-init-list is not an expression
我找到了两个相关主题,一个来自标准,另一个来自N3681提案。
第397页$14.8.2.5:初始化列表参数导致参数被视为非推断上下文。和$7.6.1.4:用新发明的类型模板参数U或std::initializer_list替换auto的出现,如果初始化器是花括号初始化列表(8.5.4),则用std::initializer_list替换。
而N3691提案建议“将大括号初始化的auto更改为不推导为初始化列表,并禁止大括号初始化的auto用于具有多个元素的情况。”它说“返回大括号列表不起作用,因为它不是表达式” http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3681.html
然而,我没有找到“为什么花括号初始化列表不是表达式?” 它可能与这个主题有相同的含义: 为什么我们不能有自动推断的返回类型? 但是,在他试图理解为什么C++委员会得出这种语法毫无价值的结论时,有一些小差异。所以这必须有一个特定的原因吧?非常感谢。