我不明白这个结果
I don't understand this result
此代码不在clang 中编译
#include <iostream>
namespace M {
class B {
public:static const int i = 1000;
};
}
namespace N {
class Y /*: public M::B*/ {
class X {
int a[i];
static const int i = 1;
public:
X() { for(int j = 0; j < i; ++j ) a[j] = 1; }
static int Get() { return i; }
};
public:
int Get() { return X::Get(); }
};
}
int main()
{
N::Y y;
std::cout << y.Get() << 'n';
}
但如果我注释掉/*: public M::B*/
,它确实会,打印1。但是,如果我将语句static const int i = 1;
放在int a[i];
之前,它会在两个版本的代码上编译,打印1。
非常感谢《标准报》的报价。
在带有注释基类的原始代码中,您试图使用尚未定义的名称i
class X {
int a[i]; // here i is undefined
static const int i = 1;
如果你要交换的两个定义
class X {
static const int i = 1;
int a[i];
那么代码将被成功编译,因为我在数组定义中使用的是以前定义的。。
当基类被取消注释时,那么在这个定义中
int a[i];
i是B类的静态数据成员,即定义为的数组
int a[1000];
之后,您定义了类X的静态数据成员i,它将类Y的基类B的静态数据元素隐藏在类X中。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 算术运算的结果类似于:C浮点变量中的1/3
- 我不明白这段代码是如何对这个pythonlist()进行排序的,也不明白如何用C++中的向量来重现它
- 我不明白为什么当我按位或短字符时得到这个结果
- 我收到此错误:错误 c2064:term 的计算结果不是采用 0 个参数的函数,但我不明白为什么
- 我不明白这个结果