我正在阅读一个名为注入类名 here的奇怪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 关键字仍然编译&amp;运行正常。查看实时演示here。为什么?难道我不会遇到编译错误吗?为什么编译好?
答案 0 :(得分:5)
我相信相关的经文是在7.1.6.3/3中(突出我的,这里引用了C ++ 17标准草案):
因此,在任何 elaborated-type-specifier 中,
enum
关键字应用于引用枚举(7.2),union
类 - key 用于表示联合(第9条),而class
或struct
class-key 应用于引用使用class
或struct
类密钥 声明的类(第9条)。
因此,可以使用任一关键字来规定注入的类名存在的范围,而不管用于声明/定义test
。
答案 1 :(得分:1)
struct和class在C ++中几乎完全相同。唯一的区别是,默认情况下,结构的成员是公共的,而类的成员是私有的。
请在此处查看完整答案:C/C++ Struct vs Class
答案 2 :(得分:-1)
class test s;
要么
struct test s;
也有效。
C ++中的类和结构实际上是相同的。
区别在于:
struct A{
};
就像
class A{
public:
};
和
class B{
};
就像
struct B{
private:
};
允许您使用struct
前缀是为了C兼容性,我想它会延伸到class
,因为“为什么不呢?”。
答案 3 :(得分:-1)
对不起,也许我误解了你的帖子,但C ++中的class和struct之间没有太大的区别。 我所知道的主要区别在于,默认情况下,结构体的所有字段都是公开的。
有一篇文章谈论结构和类之间的差异: What are the differences between struct and class in C++?