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关键字仍然编译并运行正常.在这里查看现场演示.为什么?我不应该得到编译错误吗?为什么编译好?
我相信相关的经文是在7.1.6.3/3中(突出我的,这里引用了C++ 17标准草案):
因此,在任何阐述型说明符时,
enum关键字将用于指代一个枚举(7.2)时,union类键应被用于指代一个接头(第9节),并且无论是class或struct类键应用于引用使用classorstructclass-key声明的类(第9条).
因此,可以使用任一关键字来规定注入的类名存在的范围,而不管用于声明/定义哪个test.