首页 > 解决方案 > 在 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。我不知道它可能是什么。它不是标签或三元运算符。

它似乎是一个没有第一个成员(并且没有?)的条件三元运算符,但在那种情况下,我不明白它如何在没有条件的情况下工作。

标签: c++syntax

解决方案


是书上的错别字。查看Errata 以了解 The C++ Programming Language 的第 2 次和第 3 次印刷。该示例必须如下所示:

auto z3 =[y]() { return (y) ? 1 : 2; }

推荐阅读