[英]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 中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.