我不了解冒号的一种特殊用法。
我在Bjarne Stroustrup的《 C ++编程语言》第四版第11.4.4节“调用和返回”的第297页中找到了它:
void g(double y)
{
[&]{ f(y); } // return type is void
auto z1 = [=](int x){ return x+y; } // return type is double
auto z2 = [=,y]{ if (y) return 1; else return 2; } // error: body too complicated
// for return type deduction
auto z3 =[y]() { return 1 : 2; } // return type is int
auto z4 = [=,y]()−>int { if (y) return 1; else return 2; } // OK: explicit return type
}
令人困惑的冒号出现在语句中的第7行return 1 : 2
。我不知道那会是什么。它不是标签或三元运算符。
似乎是没有第一个成员(也没有?
)的条件三元运算符,但是在那种情况下,我不了解它在没有条件的情况下如何工作。
6
我这是一个编译错误(gcc和clang)。加上所有这些行都需要分号,但仍然是一个错误。
—
Cruz Jean
最好的答案可能是:尝试编译代码;如果它不能编译,则表明它是一个错字。
—
jrw32982支持莫妮卡
我能想到的一些例子把我的头是无法编译(甚至造成内部编译器错误)上一个编译器的顶部,但没有问题接受在不同的一个
—
J.安东尼奥·佩雷斯
@John我只是用MSVC尝试了一些折叠表达式,但它们没有编译。显然,我刚刚阅读的整个章节一定是错字?;)C ++编译器始终无法编译有效的C ++代码,这是由于该语言异常复杂。
—
Voo