Mir*_*ral 12 c++ conditional-operator language-lawyer c++11 list-initialization
此代码编译:
std::string f(bool a, std::string const& b)
{
if (a) return b;
return {};
}
Run Code Online (Sandbox Code Playgroud)
该代码还可以编译:
std::string f(bool a, std::string const& b)
{
return a ? b : std::string{};
}
Run Code Online (Sandbox Code Playgroud)
此代码无法编译:
std::string f(bool a, std::string const& b)
{
return a ? b : {};
}
Run Code Online (Sandbox Code Playgroud)
假设?:
运算符的两个结果值必须是同一类型,为什么它不像第一个示例中那样推断类型?
看来,这个问题可能有类似的答案,这(基本上可以归结为“因为没有人想过写的语言规范时”)。但是,我仍然认为保留该问题很有用,因为问题本身是不同的,这仍然足够令人惊讶,并且其他人不会在搜索此问题时出现。
大括号初始化器不是表达式,因此没有类型。看到:
https://scottmeyers.blogspot.com/2014/03/if-braced-initializers-have-no-type-why.html
支撑初始化程序是在标准中具有特殊规则的语法构造,它明确指定允许的使用和类型推导。正是因为支撑初始化器没有类型,才需要这些特殊规则。?:
没有在语句中使用它们,因此程序格式错误。
如果您真的需要听到这个人本人的声音,然后再说三遍,那么您可以:
https://youtu.be/wQxj20X-tIU?t=1792
归档时间: |
|
查看次数: |
351 次 |
最近记录: |