§3.3.7/1.2 有什么理由被视为错误吗?
Is there any reason for §3.3.7/1.2 to be considered an error?
此代码是从 §3.3.7/1.5 中的示例获得的:
enum { i = 1 };
class X {
char v[i]; // error: i refers to ::i
// but when reevaluated is X::i
enum { i = 2 };
};
GCC 由于 §3.3.7/1.2 而发出错误
但是,如果我们应用 §3.4.1/7,则在声明char v[i];
中查找名称i
将在全局范围内找到enum{ i = 1 };
。重新声明enum{ i = 2 };
有什么问题?
问题是在成员函数作用域(和其他类作用域)中,枚举的类版本隐藏了全局值。
如果这不是错误,编译器将不得不选择两种令人惊讶的行为之一:
1) 始终使用类枚举的值,这意味着它必须完全解析类以确定是否有有效的大小可用。
2) 使类成员中的 i
值与类成员数组的实际长度完全不同,名义上声明为相同的长度。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- 这个错误是什么?似乎没有理由出现
- 当编译器看到 std::vector<Typo> 和 std::vector<struct 拼写错误时发出的诊断之间的差异背后的理由是什么>
- §3.3.7/1.2 有什么理由被视为错误吗?
- 是否有理由在错误处理的代码中不广泛看到错误?