正在解决具有类作用域的本地作用域的阴影

Resolving shadowing of local scope with class scope

本文关键字:作用域 阴影 解决      更新时间:2023-10-16

作用域解析运算符可用于解决类作用域和全局作用域之间的名称冲突(如下面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
}

首先,classh_l将是-332而不是333
答案是无法解决此类冲突,因为结构是数据类型声明main是具有局部作用域而非全局作用域的函数所以你不能从这个结构中寻址主函数中的变量,即使它们有不同的名称

编辑:
您仍然无法按要求访问"周围的本地范围"
因为您所在的结构定义是一个新的数据类型定义
解决方法是在主
中声明一个静态变量

static int x = -332

并在结构中正常调用

int sum = clash_l + x;