gpt4 book ai didi

C++ 模糊访问 - 虚拟继承

转载 作者:行者123 更新时间:2023-12-02 06:19:05 24 4
gpt4 key购买 nike

我尝试从其最派生类V 调用虚拟基类X 的默认构造函数。我不知道为什么从 V 调用 X 的构造函数被认为是不明确的访问。有人可以帮忙吗?

代码如下:

#include <iostream>

using namespace std;

class X {
public:
X() { cout << "X"; }
};

class Y : virtual public X {
public:
Y() { cout << "Y"; }
};

class Z : public X {
public:
Z() { cout << "Z"; }
};

class V : public Y, public Z {
public:
V() : X() {}
};

int main() {
V v;
}

最佳答案

显然,在公共(public)基础中添加一些成员函数将允许进行不明确的调用:

class X {
public:
X() { cout << "X"; }
void f();
};

那么 V 中的 this->f() 是不明确的(显然:哪个 V::X::f?)。

我的猜测是,编译器将基类的名称查找为“基类中构造函数成员的名称,作为非静态成员查找”,因此发现它是不明确的,因为有两个 V::X() 伪“继承”构造函数。

V 恰好有一个直接或虚拟基 X,因此 init-list 看起来并不含糊。

关于C++ 模糊访问 - 虚拟继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58906736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com