首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++03中的右值

C++03中的右值
EN

Stack Overflow用户
提问于 2010-06-12 02:52:37
回答 4查看 779关注 0票数 4

在C++03中,如何判断给定参数是否是右值?我正在写一些非常通用的代码,如果可能的话,我需要一个引用,否则就需要构造一个新的对象。我是否可以重载以获取按值和按引用,并让右值返回调用按值函数?

或者我有一种非常恶心的感觉,这就是为什么右值引用在C++0x中?

编辑:

is_rvalue = !(is_reference || is_pointer)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-12 03:27:33

显然,在C++03中有一种方法可以确定一个表达式是右值还是左值(我之所以这么说,显然是因为我不确定我对这项技术的理解有多好)。请注意,为了使该技术可用,预处理器宏是非常必要的。Eric Niebler写了一篇很好的文章,介绍了它是如何工作的,以及如何在BOOST_FOREACH中使用它:

  • Conditional Love: FOREACH Redux

请注意,这篇文章读起来很重(至少对我来说是这样);正如Neibler在其中所说的那样:

毫无疑问,这是晦涩难懂的东西,但我们得到了一种强大的方法来检测任何表达式的右值和左值。

使用本文中描述的右值检测至少可以帮助您处理C++0x的右值引用解决的一些问题。

票数 5
EN

Stack Overflow用户

发布于 2010-06-12 03:20:52

如何判断给定参数在C++03中是否为右值?

你不能。你所能做的就是相信你的客户和欺骗:

代码语言:javascript
运行
复制
void call_me_with_anything(const T& const_ref)
{
    /* read from const_ref */
}

void call_me_with_rvalue_only_please_i_trust_you(const T& const_ref)
{
    T& ref = const_cast<T&>(const_ref);
    /* write through ref */
}

我正在写一些非常通用的代码

那我担心C++03不会帮你剪了。

票数 2
EN

Stack Overflow用户

发布于 2010-06-12 03:19:34

,或者我有一种非常恶心的感觉,这就是为什么在C++0x中使用右值引用?

你是对的,你需要C++0x和rvalue引用来做这件事。

我能想到的最接近的事情是通过const-reference获取一些东西,因为它可以绑定到左值或右值(如果右值需要构造一个临时值,它就会)。也就是说,您的代码将无法区分这两者。

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

https://stackoverflow.com/questions/3025421

复制
相关文章

相似问题

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