在C++中交换类和结构关键字

Interchanging class & struct keyword in C++

本文关键字:结构 关键字 交换 C++      更新时间:2023-10-16

我在这里读到一个奇怪的c++特性叫做注入类名

我试着遵循简单的程序

#include <iostream>
class test
{
    int s{3};
    public:
    int get_s()
    { return s; }
};
int main() {
    class test::test s;  // struct test::test s; also allowed. Why???
    std::cout<<s.get_s();
}
如果我在main()程序的第一行用struct替换class关键字,仍然会编译&运行的很好。在这里观看现场演示。为什么?我不应该得到编译错误吗?为什么它编译得很好?

我相信相关的章节是在7.1.6.3/3中(强调我的,这里引用自c++ 17标准的草案):

因此,在任何详细类型说明符中,enum关键字应用于指枚举(7.2),union class-key应用于指联合(第9条),而 classstruct class-key应用于指使用classstruct class-key声明的类(第9条)。

因此,无论使用哪个关键字来声明/定义test,都可以使用该关键字来规定注入类名存在的范围。

结构体和类在c++中几乎是相同的。唯一的区别是,结构的成员在默认情况下是公有的,而类的成员在默认情况下是私有的。

C/c++ Struct vs Class

class test s;struct test s;也可以。

c++中的类和结构实际上是一回事。

区别是:

struct A{
};

class A{
public:
};

class B{
};

struct B{
private:
};

允许您使用struct前缀是为了C兼容性,我猜它扩展到class,因为"为什么不呢?"。

我很抱歉,也许我误解了你的帖子,但是在c++中类和结构之间没有很大的区别。我所知道的主要区别是,默认情况下,结构体的所有字段都是public的。

有一个帖子讨论结构和类之间的差异:c++中的结构和类有什么区别?