C++ 嵌套作用域访问

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++ 范围。

son*_*yao 5

这是一个隐藏名字的问题。和

如何从 IF 语句内部访问主“str”?

不幸的是这是不可能的。无法访问这些隐藏的本地名称。

我如何从 main 和/或 if 内部访问全局“str”?

您可以使用作用域解析运算符 ::来代替它,例如,它引用全局作用域中的::str名称。str

  • @PaulHK,问题是当内部作用域用自己的内部“str”变量隐藏该变量时,内部作用域如何访问外部作用域的“str”变量。答案是不可能。您的评论读起来就像您认为外部作用域正在尝试访问内部作用域的变量一样。这也是不可能的。 (2认同)