传递全局变量作为const参考

时间:2019-04-08 19:42:09

标签: c++ reference const global

以下代码可以编译和运行。 a和n的显示值为4。

#include <iostream>
using namespace std;

int a = 2;

void foo(int const&n)
{
    a = n*2;
    cout<<"a = "<<a<<"  n = "<<n<<endl;
}

int main()
{
    foo(a);
}
OUTPUT: a = 4  n = 4

为什么编译器不会抱怨n是const引用?例如,以下代码无法编译。

#include <iostream>

using namespace std;

int a = 2;

void foo(int const&a)
{
    a = a*2;
    cout<<"a = "<<a<<endl;
}

int main()
{
    foo(a);
}
OUTPUT:  In function 'void foo(const int&)':
10:7: error: assignment of read-only reference 'a'

两种情况有何不同?

1 个答案:

答案 0 :(得分:2)

在第一种情况下,您要分配给全局变量an之所以会更改,是因为它是对可变全局变量的引用。允许更改a,但禁止直接更改n

在第二种情况下,您尝试重新分配const参数a。禁止这样做,因为aconst

您要做的是使用局部变量的shadow global variable a。在第二个示例中,在foo中不存在名为a的全局变量,而是有一个使用该名称的参数。