如何获取C++上一级作用域的变量

新手上路,请多包涵

各位大佬好:
近期在学习《C++Primer》一书,在变量的作用域(2.2.4)章节有个疑惑:

#include <iostream>

int i = 100;

int
main() { // 作用域1
    int i = 10;
    std::cout << i << std::endl; 
    std::cout << ::i << std::endl;
    { // 作用域2
        int i = 1;
        std::cout << i << std::endl; // 作用域2的值,i=1 
        std::cout << ::i << std::endl;//全局作用域的值,i=100
        // std::cout << ::i << std::endl; // 有办法打印i=10?
    }

    return 0;
}

请问c++有办法在作用域2内获取上一级作用域的i变量么?

阅读 1.8k
1 个回答

:: 取的是最全局的作用域,默认取的是当前作用域,你说的上一级作用域只有编译器才知道,c++ 里面并没有语句来获得上一层作用域的概念。如果你实在需要类似的用法,只能通过 namespace 来实现。

int i = 100;

namespace xx
{
    int i;
}

int main() { // 作用域1

    //int i = 10;
    xx::i = 10;
    std::cout << i << std::endl;
    std::cout << ::i << std::endl;
    { // 作用域2
        int i = 1;
        std::cout << i << std::endl; // 作用域2的值,i=1 
        std::cout << ::i << std::endl;//全局作用域的值,i=100
        std::cout << xx::i << std::endl; // 使用 xx 作用域的 i
    }

    return 0;
}

注意,namespace 只能在全局空间内定义。

推荐问题