在 C++ 中交换 class & struct 关键字
Interchanging class & struct keyword in C++
我正在阅读一个名为 Injected class name 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() 程序的第一行中将 class 关键字替换为 struct 仍然可以正常编译和运行。查看现场演示 here。为什么?我不应该得到编译器错误吗?为什么它编译得很好?
struct 和 class 在 C++ 中几乎相同。唯一的区别是,结构的成员默认是 public 而 classes 的成员默认是私有的。
在此处查看完整答案: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
因为 "why not?".
对不起,也许我误解了你的post但是class和C++中的struct没有太大的区别。
我知道的主要区别是默认情况下,结构具有所有字段 public.
有一个 post 讨论 struct 和 class 之间的区别:
What are the differences between struct and class in C++?
我相信相关的经文在 7.1.6.3/3 中(突出显示我的,引用自 C++17 标准草案):
Thus, in any elaborated-type-specifier, the enum
keyword shall be used to refer to an enumeration (7.2), the union
class-key shall be used to refer to a union (Clause 9), and either the class
or struct
class-key shall be used to refer to a class (Clause 9) declared using the class
or struct
class-key.
因此,无论哪个关键字用于declare/define test
.
,都可以使用任一关键字来规定注入的class名称存在的范围
我正在阅读一个名为 Injected class name 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() 程序的第一行中将 class 关键字替换为 struct 仍然可以正常编译和运行。查看现场演示 here。为什么?我不应该得到编译器错误吗?为什么它编译得很好?
struct 和 class 在 C++ 中几乎相同。唯一的区别是,结构的成员默认是 public 而 classes 的成员默认是私有的。
在此处查看完整答案: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
因为 "why not?".
对不起,也许我误解了你的post但是class和C++中的struct没有太大的区别。 我知道的主要区别是默认情况下,结构具有所有字段 public.
有一个 post 讨论 struct 和 class 之间的区别: What are the differences between struct and class in C++?
我相信相关的经文在 7.1.6.3/3 中(突出显示我的,引用自 C++17 标准草案):
Thus, in any elaborated-type-specifier, the
enum
keyword shall be used to refer to an enumeration (7.2), theunion
class-key shall be used to refer to a union (Clause 9), and either theclass
orstruct
class-key shall be used to refer to a class (Clause 9) declared using theclass
orstruct
class-key.
因此,无论哪个关键字用于declare/define test
.