【发布时间】:2016-03-14 21:24:52
【问题描述】:
快速问题:我认为成员初始化列表的行为与使用“=”的正常初始化相同(除了只能使用初始化列表定义的 const 成员),调用具有特定的待初始化对象的构造函数我正在传递的参数,如下例所示(我正在调用 x 的构造函数,其值为 1)。但令我惊讶的是,在简单继承的情况下,编译器抱怨没有看到我试图用我的构造函数初始化的成员,尽管看到另一个用通常的 '=' 语法初始化的成员:
#include <iostream>
using namespace std;
class A
{
public:
int x;
int y;
};
class B : public A
{
public:
B() : x(1)
{
y = 2;
}
};
int main()
{
return 0;
}
如果您运行上面的代码,您会看到虽然 y 被检测到没有问题,但您的编译器会说在 'B() : x(1)' 行没有名为 'x' 的此类成员。这是为什么?继承是公开的,可以看到 y,那里没有问题,为什么 x 也没有?
【问题讨论】:
标签: c++ inheritance constructor initializer-list