c++ - 传递 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;
}
上面的代码按预期工作,它打印LValue reference
. 但是,当我更改const int* ptr
为时int* ptr
,程序会打印RValue reference
. 这对我来说很奇怪,因为我给它传递了一个确认的 LValue。这让我相信某种隐式转换正在发生,它将它变成一个 RValue。我确实使用 Godbolt 编译器浏览器对其进行了研究,乍一看,这会证实我的怀疑,但我对汇编一无所知,所以我不能肯定地说。
所以问题是:这里发生了什么?
解决方案
Anint*
与 a 的类型不同const int*
。由于它们不是相同的类型,因此必须进行转换,因为您不能将引用绑定到不同的类型,因此它被声明为引用(处理派生对象时除外)。
这意味着int*
用于创建一个临时的const int*
,这个临时指针是一个右值。由于它是一个右值,因此将选择右值引用重载。
推荐阅读
- c - 将结构中的数据存储在另一个结构上
- android - 如何在 Android 中修复 Tab Activity 操作栏的颜色?
- javascript - 你能用js在别人里面切换html页面吗?
- python - Python Pandas 系列中的数据比较
- javascript - 在铯查看器/地图上覆盖工具栏
- java - jna 传递几个参数
- java - 为什么 setSupportActionBar() 不能识别我的工具栏?
- yii2 - Yii2 LinkPager 中带有自定义参数的漂亮 URL
- angular - 突出显示数组中的选定项目并循环浏览
- python-3.x - TensorFlow:“tf.image.rgb_to_yuv”不起作用