首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >c++右值引用和常量限定符

c++右值引用和常量限定符
EN

Stack Overflow用户
提问于 2013-06-09 08:59:30
回答 1查看 3.6K关注 0票数 17

常量限定的众多好处之一是使API更容易理解,例如:

代码语言:javascript
复制
template<typename T> int function1(T const& in);
// clearly, the input won’t change through function1

随着rvalue引用的引入,人们可以从完美转发中受益,但通常会删除常量限定符,例如:

代码语言:javascript
复制
template<typename T> int function2(T&& in);
// can explicitly forward the input if it's an rvalue

除了文档之外,有没有一种好的方式来描述function2不会改变它的输入?

EN

回答 1

Stack Overflow用户

发布于 2013-06-09 09:12:03

你可以这样说:

代码语言:javascript
复制
template <typename T>
typename std::enable_if<immutable<T>::value, int>::type
function(T && in)
{
   // ...
}

其中你有一些类似的东西:

代码语言:javascript
复制
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 &并对其执行操作,因为通过可变绑定到临时值没有任何好处。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17005423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档