c++ - 在 Stroustrup 的示例中,“return 1 : 2”中的冒号是什么意思?
问题描述
我不明白冒号的一种特殊用途。
我在Bjarne Stroustrup的《C++ 编程语言》第 4 版第 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
。我不知道它可能是什么。它不是标签或三元运算符。
它似乎是一个没有第一个成员(并且没有?
)的条件三元运算符,但在那种情况下,我不明白它如何在没有条件的情况下工作。
解决方案
是书上的错别字。查看Errata 以了解 The C++ Programming Language 的第 2 次和第 3 次印刷。该示例必须如下所示:
auto z3 =[y]() { return (y) ? 1 : 2; }