【发布时间】:2014-12-28 20:00:57
【问题描述】:
我正在cppreference 上阅读有关如何推断 C++11 lambda 的返回类型的信息:
如果主体由单个
return语句组成,则返回类型是返回表达式的类型(在右值到左值、数组到指针或函数到指针隐式转换之后)
所以我认为这意味着 lambda 只能有一个 return 语句。但为什么它仍然适用于多个 return 语句?
这两个编译器上的compiles:
auto f = [] (bool c1, bool c2) {
if (c1) return 1;
if (c2) return 2;
else return 3;
};
【问题讨论】:
-
您链接到的页面也显示规则在 C++14 中发生了变化。我的第一个猜测是编译器即使在 C++11 模式下也实现了 C++14 规则。
-
@hvd 是的,这就是我的怀疑,但我仍然持怀疑态度。
-
FWIW,我检查了 C++11 所说的内容,它与您在网上找到的内容相匹配,所以是的,它应该生成编译时诊断。也就是说,实现 C++14 规则不会导致有效的 C++11 代码被拒绝,所以它可能只是一个小问题。
标签: c++ c++11 lambda return language-lawyer