这段代码可以编译:
std::string f(bool a, std::string const& b)
{
if (a) return b;
return {};
}
这段代码也可以编译:
std::string f(bool a, std::string const& b)
{
return a ? b : std::string{};
}
这段代码无法编译:
std::string f(bool a, std::string const& b)
{
return a ? b : {};
}
考虑到 ?:
操作符的两个结果值需要是相同类型,为什么它在第一个例子中可以推断类型,但在第二个例子中却不能推断类型呢?
看起来这个问题的答案可能与这个问题类似(基本上归结为“因为在编写语言规范时没有考虑到这个问题”)。然而我仍然认为保留这个问题是有用的,因为它本身的问题是不同的,仍然足够令人惊讶,并且其他问题在搜索这个问题时不会出现。
{}
没有类型。 - NathanOliver{}
是一个初始化列表(不能在此处使用) live: https://godbolt.org/z/imYL6q - Richard Critten{}
替换为std::initializer_list<char>()
也可以编译通过。 - jcai