小编Rok*_*kas的帖子

传递const int *和int *时,将调用不同版本的重载函数(const int * const&/ &&)

我在代码中遇到了一个错误,该错误正在调用错误的重载函数。

问题归结为:

void func(const int* const& ptr){
    std::cout << "LValue reference\n";
}
void func(const int* const&& ptr){
    std::cout << "RValue reference\n";
}

int main(){
    const int* ptr;

    func(ptr);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码按预期工作,它打印LValue reference。但是,当我改变const int* ptrint* ptr,该程序打印RValue reference。这对我来说很奇怪,因为我通过了一个确认的LValue。这使我相信正在发生某种隐式转换,从而将其转换为RValue。我确实使用godbolt编译器资源管理器进行了研究,乍看之下它会证实我的怀疑,但是我对汇编一无所知,因此无法确定。

所以问题是:这里发生了什么?

c++ pass-by-reference rvalue lvalue implicit-conversion

3
推荐指数
1
解决办法
56
查看次数