gpt4 book ai didi

c++ - 有什么方法可以通过 using 声明来提高可见度吗?

转载 作者:可可西里 更新时间:2023-11-01 15:11:18 26 4
gpt4 key购买 nike

以下代码无法编译:

class C
{
private:

int m_x;

protected:

C(int t_x) : m_x(t_x) { }

};

class D : public C
{
public:

using C::C;

};

int main(int argc, char **argv)
{
D o(0);
}

编译器反对 C 的构造函数被声明为 protected,这意味着我无法从 main 访问它。换句话说,似乎 using 声明拖拽了标识符的原始可见性,尽管它存在于 public block 中。

两个问题:

  1. 为什么会这样? (无论是关于其运作方式的规则,还是制定这些规则的理由)。
  2. 有什么方法可以解决这个问题而无需显式地为 D 编写构造函数?

最佳答案

这是一个微妙的问题。在 C++ 中,在基类构造函数上使用 using 关键字称为继承构造函数,其工作方式与 using 关键字通常的作用不同。具体来说,请注意

If overload resolution selects an inherited constructor, it is accessible if it would be accessible when used to construct an object of the corresponding base class: the accessibility of the using-declaration that introduced it is ignored.

(强调我的。Source)

换句话说,您在 public 部分中包含 using 声明这一事实实际上并没有使这些构造函数公开。

我相信,在这种情况下,您可能必须定义自己的构造函数以匹配基类型构造函数。

关于c++ - 有什么方法可以通过 using 声明来提高可见度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56777176/

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