我的书是这样说的:
具有函数主体的 Lambda 包含除未指定返回类型的单个 return 语句以外的任何内容返回 void。
但是这个:
auto f = []{
int i=0; i++;
return std::string("foo");
};
std::cout << f() << std::endl;
实际上编译并打印出“foo”,但是 lambda expr 不仅仅是一个返回语句,所以它应该返回 void,因为它没有手动指定“-> std::string”作为返回类型。
这里发生了什么?
我在最新的 Xcode 4.6 中使用 Apple 的编译器,基于 Clang 3.2 似乎:
铿锵——版本
Apple LLVM 版本 4.2 (clang-425.0.24)(基于 LLVM 3.2svn)目标:x86_64-apple-darwin12.2.0 线程模型:posix