正在解决具有类作用域的本地作用域的阴影
Resolving shadowing of local scope with class 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
}
首先,classh_l将是-332而不是333
答案是无法解决此类冲突,因为结构是数据类型声明main是具有局部作用域而非全局作用域的函数所以你不能从这个结构中寻址主函数中的变量,即使它们有不同的名称
编辑:
您仍然无法按要求访问"周围的本地范围"
因为您所在的结构定义是一个新的数据类型定义
解决方法是在主
中声明一个静态变量
static int x = -332
并在结构中正常调用
int sum = clash_l + x;
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 如何在C++中访问作用域的变量输出?
- 重载时未在 C++ 的作用域错误中声明
- 正在解决具有类作用域的本地作用域的阴影