C ++导览中的Buggy代码,其中涉及使用Lambda表达式中的switch初始化向量

时间:2019-03-23 00:35:26

标签: c++ lambda

我正在阅读 C ++浏览第二版。在第6.3.3章的最后,给出了一个示例,该示例通过其中带有switch语句的lambda初始化向量。该代码似乎无法编译。

本书中的代码如下:

vector<int> v = [&] {
    switch (m) {
    case zero:
        return vector<int> (n);
    case seq:
        return vector<int> {p,q};
    case cpy:
        return arg;
    }
};
...

似乎他在这里定义了一个lambda,并将其直接分配给vector<int> v,而不是调用它并分配返回值。我试图将其更改为此,并且它起作用:

std::vector<int> v = ([&] () -> std::vector<int> {
    switch (f) {
    case Fruit::apple:
        return std::vector<int> (1);
    case Fruit::banana:
         return std::vector<int> (2);
    case Fruit::cherry:
         return std::vector<int> (3);
    case Fruit::dragonfruit:
         return std::vector<int> (4);
    }
   return std::vector<int> (10);
 })();   
std::cout << v.size() << std::endl;

我的问题是,这本书是错的还是我错过了什么?是否有通过直接为其分配lambda来初始化对象的标准方法?

0 个答案:

没有答案