在C++中交换class&struct关键字

Des*_*tor 1 c++ injected-class-name

我读的怪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();
}
Run Code Online (Sandbox Code Playgroud)

如果我在main()程序的第一行用struct替换class关键字仍然编译并运行正常.在这里查看现场演示.为什么?我不应该得到编译错误吗?为什么编译好?

Ton*_*roy 5

我相信相关的经文是在7.1.6.3/3中(突出我的,这里引用了C++ 17标准草案):

因此,在任何阐述型说明符时,enum关键字将用于指代一个枚举(7.2)时,union 类键应被用于指代一个接头(第9节),并且无论是classstruct 类键应用于引用使用classor struct class-key声明的类(第9条).

因此,可以使用任一关键字来规定注入的类名存在的范围,而不管用于声明/定义哪个test.