是否可以调用将const rvalue作为参数的函数

Is it possible to call a function which takes a const rvalue as a parameter?

本文关键字:参数 函数 rvalue const 调用 是否      更新时间:2023-10-16

最近我不小心编程了以下程序:

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

我并不是要将" const"关键字添加到值参数。但是,这让我想到:是否可以以某种方式调用此函数,如果存在不存在const的等效函数?如果是,这是否有意义,并且是否有实际用途?

此代码:

#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;
}

打印

non const
const

有关某些解释(我无法提供;(我将您推荐给此网站。最相关的报价是:

[...]这使得const rvalue参考非常毫无用处。考虑一下:如果 我们需要的只是对对象的不可修道的引用(rvalue或 lvalue(,然后const lvalue参考完美地完成了这项工作。这 我们想挑出rvalues的唯一情况是 移动它们。在这种情况下,我们需要一个可修改的参考。

我唯一可以想象的用例就是使用someFunction检测第二个功能是返回const还是非const,但我猜我想有更简单的方法可以找到。

作为旁注:当您将s替换为上述代码中的CC_4时,它会打印:

non const 
non const

是因为(引用同一网站,评论Pizer(:

没有标量类型的const值。对于const rvalue 要么需要XVALUE和/或类型对象。[...]