继承:如果默认为 private,为什么这两个示例的工作方式不同?

Jol*_*luk 0 c++ inheritance

我正在处理 C++ 中的继承问题。据我所知,如果您不指定,B 将始终从 A 继承 private。

那么为什么这段代码可以工作:

struct A {};
struct B : A {};

int main(void)
{
    A b = B();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这会产生“A 是 B 的不可访问的基点”错误:

struct A {};
struct B : private A {};

int main(void)
{
    A b = B();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望它们是一样的?

Hol*_*Cat 5

如果使用单词 定义派生类,则默认为私有继承class

如果您使用 创建它struct,则默认情况下继承是公共的。


use*_*570 5

来自cppreference

默认情况下,用关键字定义的类对其成员及其基类struct具有公共访问权限

默认情况下,用关键字定义的类对其成员及其基类class具有私有访问权限

或者来自派生类文档

如果省略 access-specifier,则对于使用 class-key 声明的类,它默认publicstruct;对于使用 class-key 声明的类,它默认为privateclass

上面的引用解释了程序的行为。