J3S*_*TER 4 c++ scope nested name-hiding
我最近在cppreference 中看到了这段代码:
string str="global scope";
void main()
{
string str="main scope";
if (true){
string str="if scope";
cout << str << endl;
}
cout << str << endl;
}
Run Code Online (Sandbox Code Playgroud)
哪个输出:
if scope
main scope
Run Code Online (Sandbox Code Playgroud)
这很好,我了解整个嵌套作用域的事情,并且我知道当堆栈在语句末尾展开它时, if 作用域内的“str”将被销毁,因此此后它将不可用,因此第二个print 将主“str”作为其参数。
但是,我知道主“str”实际上在 IF 内部可用,或者至少应该是,但问题是如何从 IF 语句内部访问主“str”?
我如何从 main 和/或 if 内部访问全局“str”?
我知道使用不同的名称会更简单,但这个问题不是为了特定的实际应用,而是为了更好地理解 c++ 范围。
这是一个隐藏名字的问题。和
如何从 IF 语句内部访问主“str”?
不幸的是这是不可能的。无法访问这些隐藏的本地名称。
我如何从 main 和/或 if 内部访问全局“str”?
您可以使用作用域解析运算符 ::来代替它,例如,它引用全局作用域中的::str名称。str