我正在阅读C++引物第5版,第10章(lambdas表达式),这是一个程序,旨在用它们的绝对值替换向量中的负值。
transform(vi.begin(), vi.end(), vi.begin(),
[](int i) { if (i < 0) return -i; else return i; });提交人说:
这段代码不会编译,因为lambda将返回类型推断为
void,但是我们返回了一个值,要解决这个问题,我们必须使用尾随返回类型。
但是,当我在Windows上用GNU GCC编译器编译这段代码时,它工作得很好。
提交人还说:
此版本编译是因为我们不需要指定返回类型,因为可以从条件运算符的类型推断该类型。
transform(vi.begin(), vi.end(), vi.begin(),
[](int i) { return i < 0 ? -i : i; });所以,我的问题是:
发布于 2017-12-13 18:26:35
来自兰卜达
..。根据以下规则确定闭包的操作符()的返回类型:
因此,作者只是在C++14之前描述了情况,因为C++14代码工作得很好。
https://stackoverflow.com/questions/47799615
复制相似问题