void func(const int& i)
和void func(int& i)
之间有什么区别。如果const在顶层切断,是否可以调用第二个过载?为什么const重载是首选的?以下将始终选择第一个重载:
func(42);
func(int{42});
int i = 42;
func(i);
int &j = i;
func(j);
func(i + 1);
哎呀,我看到我现在的问题了。我在两个函数中都输入了cout << "const\n"
,所以看起来总是调用第一个重载。对不起伙计们。
答案 0 :(得分:2)
const
是对您自己和其他开发人员的提示,您不打算修改被观察对象。如果参数是const,则选择const重载:
#include <iostream>
void f(const int&)
{
std::cout << "f(const int&)\n";
}
void f(int&)
{
std::cout << "f(int&)\n";
}
int main()
{
int a = 0;
const int b = 0;
int& c = a;
const int& d = a;
f(a);
f(b);
f(c);
f(d);
}
这将输出
f(int&)
f(const int&)
f(int&)
f(const int&)
请参阅this demo。
正如您所看到的,并不总是const
重载。
答案 1 :(得分:0)
void func(const int& i)
和void func(int& i)
之间有什么区别。
void func(const int& i)
和void func(int& i)
之间的区别在于,您无法在第一个函数中更改i
,而在第二个函数中则可以更改。{/ p>
甚至可以调用第二次重载吗?
如果参数不是const
,则会选择第二个函数。
为什么首选
const
重载?
这取决于。如果您打算更改其值,则无法使用const
。如果您想确保不会意外或故意更改变量,则应使用const
。查看此帖子:Use const wherever possible in C++?了解更多信息。