gpt4 book ai didi

c++ - 继承二级基类构造函数: silent error

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

我今天遇到了一个非常严重的错误,这是一个 MWE:

#include <iostream>

class X {

public:
X() { std::cout << "Default" << std::endl; }
X(int a) { std::cout << a << std::endl; }
};

class Y : public X { };

class Z : public Y {
using X::X;
};

int main() {
Z instance{3};
}

与我的预期相反,打印了“Default”。 不可否认,代码是错误的,因为 Z 的继承构造函数试图初始化 X 而没有指定如何构造 Y (∗) . 但是,编译器不应该提示吗? Y(以及随后的 X)的默认构造函数被调用,完全无提示地忽略我的参数 3 背后的基本原理是什么?这是否记录在标准的某处?还是我的编译器存在错误?

我的环境是gcc version 6.2.1 20160916 (Red Hat 6.2.1-2)。即使使用 -Weffc++ -Wall -Wextra -pedantic 也不会产生编译器警告。

最佳答案

这是一个 g++ 错误,代码无效。只能继承直接基类的构造函数:

[namespace.udecl] §3 If such a using-declaration names a constructor, the nested-name-specifier shall name a direct base class of the class being defined

关于c++ - 继承二级基类构造函数: silent error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39702532/

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