为什么编译器没有在Derived类构造函数的定义中抱怨?

Ayr*_*osa 4 c++ visual-studio-2008

请注意,Derived类构造函数具有ii第一个参数,但传递给的参数有意Base为i.

class Base
{
    protected:
    int i;

    public:
    Base(int i) : i(i) {}
};

class Derived : public Base
{
    private:
    int k;

    public:
    Derived(int ii, int k) : Base(i), k(k) {}  // Why not C2065: 'i' undeclared identifier
};

int main()
{

}
Run Code Online (Sandbox Code Playgroud)

Set*_*gie 7

因为i是继承自的成员变量Base,所以它是定义的.您可以在初始化列表中自由访问成员变量,但您正在做的是在初始化之前访问变量,我相信这是未定义的行为.