如何在c++中引用与局部变量同名的全局变量

How to refer to a global variable which has the same name as a local variable in C++?

本文关键字:局部变量 全局变量 引用 c++      更新时间:2023-10-16

如果存在一个全局变量,并且函数有一个同名的形参,并且期望的结果是局部变量和全局变量的和,那么在这种特殊情况下我们如何引用全局函数呢?我知道这样做不是个好主意。只是出于好奇。

int foo = 100;
int bar(int foo)
{
    int sum=foo+foo; // sum adds local variable and a global variable
    return sum;
}
int main()
{
    int result = bar(12);
    return 0;
}

到目前为止,最好的选择是重命名函数参数,这样它就不会与全局变量冲突,因此不需要规避。

假设重命名选项不可接受,使用::foo在全局作用域引用foo:

#include <iostream>
int foo = 100;
int bar(int foo)
{
    int sum = foo + ::foo; // sum adds local variable and a global variable
    return sum;
}
int main()
{
    int result = bar(12);
    cout << result << "n";
    return 0;
}

局部名称和全局名称之间的冲突是不好的——它们会导致混淆——所以值得避免它们。您可以在GCC中使用-Wshadow选项(g++, C代码使用gcc)来报告阴影声明的问题;与-Werror一起,它停止代码编译。

使用::foo -但真的不要这样做。它会让每个人感到困惑,你真的不应该做这些事情。相反,重命名一个或另一个变量。使用::前缀来解决这个问题是一个糟糕的主意。

最佳做法是始终以小写"&;g"开头命名全局变量。如gX gY

从一开始就不清楚应该给变量起什么名字。

:: foo。这是一个很酷的技巧