如何引用与C++中的局部变量同名的全局变量?

Fai*_*eer 5 c++ scope global-variables local-variables parameter-passing

如果存在全局变量并且函数具有相同名称的参数,并且期望的结果是本地变量和全局变量的总和,那么在这种特定情况下我们如何引用全局函数?我知道这样做并不好.但只是为了好奇而要求.

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;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 11

到目前为止,最好的选择是重命名函数参数,使其不与全局变量冲突,因此不需要规避.

假设重命名选项不可接受,请使用在全局范围内::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;
}
Run Code Online (Sandbox Code Playgroud)

本地名称和全球名称之间的冲突很糟糕 - 它们会引起混淆 - 所以值得避免它们.您可以使用-WshadowGCC选项(g++gccC代码)来报告阴影声明的问题; 结合使用-Werror,它会停止代码编译.


Mat*_*son 5

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