gpt4 book ai didi

c++ - 将全局变量作为 const 引用传递

转载 作者:行者123 更新时间:2023-11-28 01:22:13 27 4
gpt4 key购买 nike

以下代码可以编译并运行。 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'

这两种情况有何不同?

最佳答案

在第一种情况下,您将分配给一个全局变量an 发生变化,因为它是对可变全局变量的引用。允许改变a,但禁止直接改变n

在第二种情况下,您试图重新分配给 const 参数 a。这是被禁止的,因为 aconst

你所做的是shadow global variable a 带有局部变量。在第二个示例中,foo 中不存在名为 a 的全局变量,取而代之的是一个占用该名称的参数。

关于c++ - 将全局变量作为 const 引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55580659/

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