用类范围解决局部范围的阴影

时间:2014-10-31 20:49:11

标签: c++ scope

范围解析运算符可用于解决类范围与全局范围之间的名称冲突(如下面G::sum的初始化中所示)。是否有可能解决本地类的范围与其周围的本地范围之间的类似冲突(如下面的L::sum初始化中所示(未))?

#include <cassert>

int clash_g = -332;

struct G {
  int clash_g = 333;
  int sum = clash_g + ::clash_g;
};

int main() {

  int clash_l = -332;

  struct L {
    int clash_l = 333;
    int sum = clash_l + clash_l;
  };

  assert(G().sum == 1);
  assert(L().sum == 666); // Want 1, like in G::sum

}

1 个答案:

答案 0 :(得分:0)

首先clash_l将是-332而不是333
答案是您无法解决此类冲突,因为struct是数据类型声明 主要是局部范围而不是全局范围的函数 因此,即使它们具有不同的名称,您也无法通过此结构处理主函数中的变量

编辑:
你仍然无法访问&#34;周围的本地范围&#34;正如你问的那样 因为你在结构定义中是一个新的数据类型定义
解决方法是在主要

中声明一个静态变量
static int x = -332

并在struct

中正常调用它
int sum = clash_l + x;