我该如何在C++14中编写一个通用的转发lambda函数?
尝试 #1
[](auto&& x) { return x; }
在函数主体中,x
是一个左值,所以这并不起作用。
尝试 #2
[](auto&& x) { return std::forward<decltype(x)>(x); }
这个lambda函数内部正确地进行了引用传递,但它总是会返回按值(除非编译器省略了复制操作)。
尝试 #3
[](auto&& x) -> decltype(x) { return std::forward<decltype(x)>(x); }
这将返回与参数相同的类型(可能-> auto&&
也可以正常工作),并且似乎可以正常工作。
第四次尝试
[](auto&& x) noexcept -> decltype(x) { return std::forward<decltype(x)>(x); }
添加 noexcept
是否会使得这个lambda表达式更适用,从而比#3严格更好呢?