R ++中的Rvalues 03

Pup*_*ppy 4 c++ templates rvalue lvalue c++03

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

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

编辑:

is_rvalue =!(is_reference || is_pointer)?

Mic*_*urr 5

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

请注意,这篇文章非常重读(至少对我而言); 正如Neibler所说:

毫无疑问,这是一个神秘的东西,但我们有一种强大的方法来检测任何表达式的右值和左值.

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