我正在阅读 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来初始化对象的标准方法?