如何调用非const重载?

时间:2014-03-10 16:32:37

标签: c++

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",所以看起来总是调用第一个重载。对不起伙计们。

2 个答案:

答案 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++?了解更多信息。