加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 每次我使用struct而不是class时,我会杀死一只小猫吗?

发布时间:2020-12-16 04:53:28 所属栏目:百科 来源:网络整理
导读:默认情况下,struct是public,而class默认是private. 让我们以Ogre3D为例;如果我用struct更改所有类的出现,它会编译(我猜),并且引擎就像以前一样工作. 如果我是对的,编译后的代码与之前完全相同,因为只有编译器会检查是否调用了私有/受保护的方法,而不是在运行
默认情况下,struct是public,而class默认是private.

让我们以Ogre3D为例;如果我用struct更改所有类的出现,它会编译(我猜),并且引擎就像以前一样工作.

如果我是对的,编译后的代码与之前完全相同,因为只有编译器会检查是否调用了私有/受保护的方法,而不是在运行时检查它.

如果我仍然是正确的,那么课程只是一个关键词,只是让它可爱的眼睛和乞求“请封装你的数据:你将保存一只小猫”,而私人/受保护的范围仍然取决于用户.

我知道我听起来有点蹩脚或无关紧要的反叛(类似“C是KISS老兄,不要去”)

回到问题:在生成机器代码时,标准对结构和类之间的这种微小差异有什么看法?为什么要添加一个关键字,并尝试用所谓的“OO模型”给程序员留下深刻印象,而这完全没有强制执行呢?它受java的影响吗?

解决方法

struct和class之间的区别只是base和attributes的默认访问级别,访问级别只在编译时验证,所以你可能想让一些库编辑头文件并用struct更改所有类以获得访问权限内部细节.

如果更改默认访问说明符,则编译器不需要生成完全相同的代码.特别是这两个类可以有或没有相同的内存布局,具体取决于编译器:

struct a {
   int a;
private:
   int b:
};
class b {
   int a;
public:
   int b;
};

原因是该标准要求所有成员属性在内存中以相同的访问限定符内的增加位置布局.允许使用编译器(我不知道任何编译器,但由于这不是必需的,它可能会在下一版本中更改),从不同的访问块重新排序字段.编译器可以决定公共属性首先出现,而私有属性出现在对象的末尾,这意味着将交换两个类中的字段a和b的位置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读