xia*_*g z 8 c++ pass-by-reference
void foo(const int& v) {
int x = v;
std::cout << x;
}
int main()
{
unsigned y = 1;
foo(y);
}
Run Code Online (Sandbox Code Playgroud)
是用C++ y代替const int&合法的
有两个因素可以让您的代码工作.首先,如果允许函数参数匹配重载,则允许最多一次隐式转换.其次,const引用可以绑定到临时工.这里发生的事情y是隐式转换为int,创建一个临时副本.v然后绑定到那个临时的.
请考虑以下示例:
#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;
}
Run Code Online (Sandbox Code Playgroud)
您会发现foo(y)打印的地址y与bar(y)打印不同地址的地址相同.这不适用于非const引用.值得注意的是,如果可以的话,这意味着改变v可能实际上并没有改变y.