正如许多书中所提到的,与C ++结构和类的区别在于访问控制描述符。因此,我想知道以下陈述是否正确:
C中的struct是unboxed:struct中的成员明显位于分配struct的位置。 但是C ++中的struct是类似盒子的类型:members / headers位于其他地方,并且分配struct的地方包含指向members / headers的指针。
这种理解是对的吗?
是否可以在C ++中创建一个未装箱的类型,它还包含实例方法?
答案 0 :(得分:7)
对我来说完全是胡说八道。
成员并非神奇地“位于其他地方”,没有涉及指针,而且标题与无关。。 C ++编译器甚至不知道标头存在!
答案 1 :(得分:3)
此讨论中缺少的关键字是“POD”(Plain Old Data structure)。 (拳击与.NET和可能的Java有关 - 虽然我不记得使用这个词的Java术语)
POD基本上意味着它可以通过'blitting bits'(memcpy,memmov)在内存中移动。 C ++标准规范中有明确的要求。
C结构总是 POD(普通旧数据),而C ++类可以具有与(虚拟)继承相关的“额外魔法”。
看看这个:
答案 2 :(得分:2)
C,C ++和C#都是非常不同的语言,看起来你试图从另一个角度来考虑一个。关于拳击的陈述在C或C ++语境中没有任何意义。
答案 3 :(得分:1)
不,这完全是不正确的。您可以在C ++中编写一个完全C兼容的结构,并在C ++中使用它编译代码,为它提供一个C接口。
然后你可以用C编写的程序使用struct并从库中调用函数,不会有任何问题。
事实上,许多C ++库操纵C数据结构并与C进行交互。
虽然不推荐,但您可以在结构中执行此操作,并且仍然可以移植到C语言。
struct X
{
#ifdef __cplusplus
private:
#endif
// members variables
#ifdef __cplusplus
public:
// methods
#endif
};
但只有在没有任何成员函数是虚拟的情况下才可移植。不确定这是否是文章所说的“拳击”。
答案 4 :(得分:0)
在c ++中,结构和类之间的区别就像你正确注意到的那样,隐式访问控制描述符。 class是private,而struct是public。
以下内容:
struct A : B
{
int x;
};
相当于:
class A : public B
{
public:
int x;
};
根据我的理解,没有其他差异。