C结构是未装箱的,而C++结构是装箱类型
C struct is unboxed while C++ struct is a boxed type?
正如许多书籍所提到的,与C++结构和类的区别在于访问控制描述符。因此,我想知道以下说法是否正确:
C中的结构是未装箱的:结构中的成员明显位于结构的分配位置旁边。但C++中的结构是一个类似于装箱类型的类:成员/标头位于其他位置,并且结构的分配位置包含一个指向成员/标头的指针。
这种理解正确吗?
是否可以在C++中创建一个未装箱的类型,其中也包含实例方法?
在我看来完全是胡说八道。
成员不会神奇地"位于其他地方",不涉及指针,并且头与无关。C++编译器甚至不知道头的存在!
此讨论中缺少的关键字是"POD"(纯旧数据结构)。(Boxing与.NET有关,也可能与Java有关——尽管我不记得Java术语中使用过这个词)
POD基本上意味着它可以通过"blitting bits"(memcpy,memmov)在内存中移动。C++标准规范中有明确的要求
C结构总是POD(纯旧数据),而C++类可以具有与(虚拟)继承相关的"额外魔力"。
看看这个:
C++中的POD类型是什么?
C、C++和C#都是非常不同的语言,看起来你正试图用另一种语言来看待它们。你关于拳击的说法在C或C++上下文中没有任何意义。
另请参阅:
-
什么';.NET中结构和类的区别是什么?
-
C++中的结构和类之间有什么区别?
-
(当然,C没有
class
es)
然后,您可以让一个用C编写的程序使用结构并从库中调用函数,这样就不会有任何问题。
事实上,许多C++库操作C数据结构并与C.交互
虽然不建议您在结构中这样做,但它仍然可以移植到C.
struct X
{
#ifdef __cplusplus
private:
#endif
// members variables
#ifdef __cplusplus
public:
// methods
#endif
};
但是当且仅当成员功能都不是虚拟的时才可移植。不确定这是否是文章所说的"拳击"的意思。
在c++中,结构和类之间的区别在于,正如您正确注意到的那样,隐式访问控制描述符。类是私有的,而结构是公共的。
因此以下内容:
struct A : B
{
int x;
};
相当于:
class A : public B
{
public:
int x;
};
根据我的理解,没有其他区别。
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- 在 c++ 中拥有一组结构的正确方法是什么?
- vscode g++链路故障:体系结构x86_64的未定义符号
- C++概念:如何使用'concept'检查模板化结构的属性?