【发布时间】:2011-04-27 09:56:45
【问题描述】:
我经常看到这种形式的例子:
template <typename T, typename U>
auto add(T&& t, U&& u) -> decltype(std::forward<T>(t) + std::forward<U>(u))
{
return std::forward<T>(t) + std::forward<U>(u);
}
但我敢说这是更好更正确的方式:
template <typename T, typename U>
auto add(T&& t, U&& u) -> decltype(t + u)//no forwarding here
{
return std::forward<T>(t) + std::forward<U>(u);
}
为什么?首先,这个例子中的 decltype 只需要推断返回类型,所以 (t + u) 是返回类型而不是 (std::forward(t) + std::forward(u)),第二个代码由两个 ver 生成相同,第三个 decltype(u + t) 更直接,准确地表达了程序员的意图,而不带出实现的“胆量”。
你对这个问题有什么看法?
【问题讨论】:
标签: c++ templates c++11 decltype perfect-forwarding