【问题标题】:How to refer to a global variable which has the same name as a local variable in C++?如何引用与 C++ 中的局部变量同名的全局变量?
【发布时间】:2014-04-24 21:33:50
【问题描述】:

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

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,不是吗?
  • 这就是我想弄清楚的,我们可以让函数的参数与全局变量的参数同名吗?

标签: c++ global-variables parameter-passing scope local-variables


【解决方案1】:

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

假设重命名选项不可接受,使用::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 一起,它会停止代码编译。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我知道这很糟糕,但我只是在挑选逻辑。
    猜你喜欢
    • 2011-08-15
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多