【发布时间】:2011-01-24 17:24:27
【问题描述】:
struct 默认为公开,class 默认为私有。
我们以 Ogre3D 为例;如果我用 struct 更改所有 class 出现,它会编译(我猜),并且引擎像以前一样工作。
如果我是对的,编译后的代码与以前完全相同,因为只有编译器会检查是否调用了私有/受保护的方法,而不是在运行时检查。
如果我还是对的,class 只是一个关键字,它只是让它可爱的眼睛并乞求“请封装你的数据:你会拯救一只小猫”,而私有/受保护范围仍然取决于用户.
我知道我听起来有点蹩脚或无关紧要的反叛(比如“C is KISS dude,不要走”
回到问题:在生成机器码时,标准对struct 和class 之间的这个小区别有何看法?为什么要添加一个关键字并试图用所谓的“OO 模型”给程序员留下深刻印象,而那时它完全没有被强制执行?受java影响吗?
【问题讨论】:
-
实际上恰恰相反。每次使用“结构”就足够了的“类”关键字时,你就杀死了一只小猫。不,自从 C++ 出现以来就没有受到 Java 的影响。
-
C++ 不是严格意义上的 OO 语言,它是一种多范式语言,支持的不仅仅是 OO,因此它不会试图将 OO 概念强加给开发人员。如果他们愿意,开发人员可以使用 OO 风格。在此处查看 C++ 标记的信息条目stackoverflow.com/tags/c%2b%2b/info
-
stackoverflow.com/questions/4090794/…这个问题有更多答案。
-
“为什么要添加关键字” - 因为在 C++ 中它应该 是
class,但struct也是为了向后兼容 C。别担心,没有人试图给你留下深刻印象。实际上,编译器强制使用struct定义的任何类必须是 POD 可能很有用,但没有这样的运气。 -
"受 Java 影响吗?"哈哈哈。这很有趣!