2017-05-05 63 views
-1

最近我无意中程序如下:是否有可能调用一个将const rvalue作为参数的函数?

void someFunction(const SomeClass&& value){ 
    //Some Code 
} 

我不是故意的“常量”关键字添加到值参数。但是,这让我想:如果不存在const的等价函数存在,是否甚至有可能以某种方式调用此函数:?如果是的话,这是否有意义,是否有一些实际用途呢?

+0

http://www.codesynthesis.com/~boris/blog/2012/07/24/const-rvalue-references/。 “具体来说,const rvalue将喜欢绑定到const rvalue引用而不是const lvalue引用。”但是,你不应该打扰const的价值。他们没有太大意义。 – mutex36

回答

2

此代码:

#include <iostream> 
using namespace std; 

struct s{};  

void someFunction(s& value){ std::cout << "ref" << std::endl; } 

void someFunction(const s&& value){ std::cout << "const" << std::endl; } 

void someFunction(s&& value){ std::cout << "non const" << std::endl; } 

const s foo() { return s(); } 
s bar() { return s(); } 


int main() { 
    someFunction(bar()); 
    someFunction(foo()); 
    return 0; 
} 

Prints

non const 
const 

对于一些解释(我不能提供;)我是指你this site。最相关的报价是:

[...]这使得const rvalue引用相当无用。想一想:如果我们需要的是一个不可修改的对象的引用(右值或右值),那么常量左值引用完美地完成了这项工作。 唯一的情况,我们想单挑rvalues是如果我们想 移动它们。在那种情况下,我们需要一个可修改的参考。

唯一的使用情况下,我能想象是用someFunction检测第二函数是返回一个const或非const,但我想有更容易的方式找到了这一点。

一点题外话:当你在上面的代码it printsint替换s

non const 
non const 

,这是因为(来自同一个站点,从皮泽评论引述):

有没有标量类型的常量值。对于const rvalue,你需要一个Xvalue和/或一个类型的对象。 [...]

+0

查看关于链接文章的评论以获得更多关于为什么使用'int'使用非''constst'重载的更多信息:*“没有标量类型的常量值。对于const rvalue,您需要Xvalue和/或一个类型对象,我几乎可以肯定,一个符合的编译器会根据f(1)在重载分辨率方面对f(g())进行处理,因为g只是返回一个值而不是一个对象。“* – clcto

+0

@clcto谢谢澄清 – user463035818

相关问题