gpt4 book ai didi

c++ - 为什么不同类型的变量可以用作 C++ 中 const 引用参数的参数的参数

转载 作者:可可西里 更新时间:2023-11-01 17:36:34 28 4
gpt4 key购买 nike

void foo(const int& v) {
int x = v;
std::cout << x;
}

int main()
{
unsigned y = 1;
foo(y);
}

正在传递 y 来代替 C++ 中合法的 const int&

最佳答案

有两个因素可以让您的代码正常工作。首先,如果允许函数参数匹配重载,则允许函数参数最多进行一次隐式转换。其次,const 引用可以绑定(bind)到临时对象。这里发生的是 y 隐式转换为 int,创建一个临时拷贝。 v 然后绑定(bind)到那个临时的。

考虑以下示例:

#include <iostream>

void foo(const unsigned int & v) {
std::cout << &v << '\n';
}

void bar(const int & v) {
std::cout << &v << '\n';
}

int main()
{
unsigned int y = 1;
std::cout << &y << '\n';
foo(y);
bar(y);
return 0;
}

您会发现 foo(y) 打印出与 y 相同的地址,而 bar(y) 打印出不同的地址。这不适用于非 const 引用。值得注意的是,如果可以的话,这意味着更改 v 可能实际上不会更改 y

关于c++ - 为什么不同类型的变量可以用作 C++ 中 const 引用参数的参数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48647305/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com