范围解析运算符可用于解决类范围与全局范围之间的名称冲突(如下面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
}
答案 0 :(得分:0)
首先clash_l将是-332而不是333
答案是您无法解决此类冲突,因为struct是数据类型声明
主要是局部范围而不是全局范围的函数
因此,即使它们具有不同的名称,您也无法通过此结构处理主函数中的变量
编辑:
你仍然无法访问&#34;周围的本地范围&#34;正如你问的那样
因为你在结构定义中是一个新的数据类型定义
解决方法是在主要
static int x = -332
并在struct
中正常调用它int sum = clash_l + x;