在C++中交换类和结构关键字
Interchanging class & struct keyword in C++
我在这里读到一个奇怪的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条),而class
或struct
class-key应用于指使用class
或struct
class-key声明的类(第9条)。
因此,无论使用哪个关键字来声明/定义test
,都可以使用该关键字来规定注入类名存在的范围。
结构体和类在c++中几乎是相同的。唯一的区别是,结构的成员在默认情况下是公有的,而类的成员在默认情况下是私有的。
C/c++ Struct vs Classclass test s;
或struct test s;
也可以。
c++中的类和结构实际上是一回事。
区别是:
struct A{
};
class A{
public:
};
和
class B{
};
struct B{
private:
};
允许您使用struct
前缀是为了C兼容性,我猜它扩展到class
,因为"为什么不呢?"。
我很抱歉,也许我误解了你的帖子,但是在c++中类和结构之间没有很大的区别。我所知道的主要区别是,默认情况下,结构体的所有字段都是public的。
有一个帖子讨论结构和类之间的差异:c++中的结构和类有什么区别?
相关文章:
- 如何循环打印顶点结构
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 通过方法访问结构
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 前向声明时"结构"和"类"关键字是否相同?
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?
- 为什么C++中的关键字结构与 C 中的关键字结构不同?
- 使用此关键字在结构中引用类时出现问题
- 使用 "struct" 关键字的结构实例化
- nvcc、gcc、clang 和 msvc 是否在结构中"respect"__restrict__关键字?
- C++中具有新关键字的结构的2D数组
- 在结构构造函数中使用"this"关键字编译错误?-C++
- C++:结构和new关键字
- 构造函数名称之前的关键字结构
- Volatile关键字允许访问UnitTest++中的常量结构
- 这个流控制关键字类标识符的结构是什么?
- 在 c++ 中使用带有结构的"new"关键字
- 在C++中交换类和结构关键字
- 我可以将final关键字应用于c++ 11中的POD(标准布局)结构体吗?我应该
- 如何使用 'auto' 关键字遍历 C++ STL 映射数据结构?