我不了解冒号的一种特殊用法。
我在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
}
Run Code Online (Sandbox Code Playgroud)
令人困惑的冒号出现在语句中的第7行return 1 : 2
。我不知道那会是什么。它不是标签或三元运算符。
似乎是没有第一个成员(也没有?
)的条件三元运算符,但是在那种情况下,我不了解它在没有条件的情况下如何工作。
S.M*_*.M. 205
这是一个错字。查看勘误表,了解C ++编程语言的第二版和第三版。该示例必须如下所示:
auto z3 =[y]() { return (y) ? 1 : 2; }
Run Code Online (Sandbox Code Playgroud)
Jer*_*fin 19
在我看来就像一个简单的错字。应该可能是:
auto z3 =[y]() { return y ? 1 : 2; }
Run Code Online (Sandbox Code Playgroud)
请注意,由于lambda不带任何参数,因此parens是可选的。如果您愿意,可以改用此方法:
auto z3 =[y] { return y ? 1 : 2; }
Run Code Online (Sandbox Code Playgroud)