如果存在全局变量并且函数具有相同名称的参数,并且期望的结果是本地变量和全局变量的总和,那么在这种特定情况下我们如何引用全局函数?我知道这样做并不好。但要求好奇心。
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;
}
答案 0 :(得分:10)
到目前为止,最好的选择是重命名函数参数,使其不与全局变量冲突,因此不需要规避。
假设重命名选项不可接受,请使用::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;
}
本地名称和全球名称之间的冲突很糟糕 - 它们会导致混淆 - 所以值得避免它们。您可以将-Wshadow
选项与GCC(g++
一起使用,并将gcc
用于C代码)来报告阴影声明的问题;与-Werror
一起,它会停止代码编译。
答案 1 :(得分:3)
使用::foo
- 但真的不这样做。它会让每个人感到困惑,你真的不应该做那些事情。而是重命名一个或另一个变量。使用::
前缀来解决此问题是一个不可思议的想法。