常量限定的众多好处之一是使API更容易理解,例如:
template<typename T> int function1(T const& in);
// clearly, the input won’t change through function1
随着rvalue引用的引入,人们可以从完美转发中受益,但通常会删除常量限定符,例如:
template<typename T> int function2(T&& in);
// can explicitly forward the input if it's an rvalue
除了文档之外,有没有一种好的方式来描述function2不会改变它的输入?
发布于 2013-06-09 09:12:03
你可以这样说:
template <typename T>
typename std::enable_if<immutable<T>::value, int>::type
function(T && in)
{
// ...
}
其中你有一些类似的东西:
template <typename T> struct immutable
: std::integral_constant<bool, !std::is_reference<T>::value> {};
template <typename U> struct immutable<U const &>
: std::true_type {};
这样,只有当通用引用是常量引用(所以T = U const &
)或右值引用(所以T
不是引用)时,模板才可用。
也就是说,如果参数不打算更改,您可以只使用T const &
并对其执行操作,因为通过可变绑定到临时值没有任何好处。
https://stackoverflow.com/questions/17005423
复制相似问题