【发布时间】:2017-05-21 05:20:24
【问题描述】:
this question 的回答引起了我的注意,我认为通过引用返回的 lambdas 正在复制。例如,如果我们这样定义:
struct A {
A() = default;
A(const A&) { cout << "copy\n"; }
};
这段代码都没有调用复制构造函数:
A a;
const A* pa = &a;
const A& ra = *pa;
但是这段代码在返回时调用了复制构造函数:
[](const A* pa){ return *pa; }(pa);
我不明白。为什么它通过副本返回?或者更一般地说,我想我应该问:“lambda 如何决定如何返回?”
【问题讨论】:
-
你在哪里返回参考?
-
使用
[](const A* pa) -> const A& { return *pa; }(pa);通过引用返回。 -
@Jarod42 是的,或者,
decltype(auto)是在原始问题中提出的。 -
@NathanOliver 我想我链接的问题提供了一个很好的例子,基本上 lambda 正在返回外部拥有的东西,因此副本将是多余和浪费的。
标签: c++ lambda reference return return-type