2008-11-21 10 views

回答

4

它给你灵活性。例如,你可能有一堆构造函数,一些公共的,一些受保护的,一些是私有的 - 你不希望它们全部组合在一起吗?

1

我想你是对的。不强制让用户可以按照他们认为合适的方式对事物进行分组,以获得更好的代码可读性。

编译器可能在内存中组织不同的东西。

编辑:按该规范:

第9.2节第12(1998和2003的标准):(非联合)的

非静态数据成员类而没有中间的访问限定声明被分配以便后面的成员在类对象中拥有更高的地址。未指定由访问说明符分隔的非静态数据成员的分配顺序(11.1)。执行对齐要求可能会导致两个相邻成员不能立即分配;所以可能需要管理虚拟功能(10.3)和虚拟基类(10.1)的空间。

我发现a related SO question

+0

我认为内存顺序实际上是固定的,以保持与C结构向后兼容。 – 2008-11-21 19:43:51

+0

它是,除非在成员之间有访问说明符,这正是这里的情况。我已经包含了规范中的相关部分。 – 2008-11-21 20:02:00

+0

感谢您的澄清 - 我每天都会学到新的东西。 – 2008-11-21 20:10:01

0

这个信息我的猜测是,它是C的理念,它假设你知道自己在做什么,并为您提供了最大的灵活性的产物。这就像在if语句中允许单个=一样。

0

我实际上以一种稍微不愉快的方式利用了这一点:我经常使用的代码习惯是私有成员,具有公共访问器函数。

我有一个MACRO(不寒而栗),它会从一行自动生成这些。

例如:

PROPERTY(int, MyVal); 

...生成:...

private: 
    int fMyVal; 
public: 
    void setMyVal(const int f) { fMyVal = f; }; 
    int getMyVal() { return fMyVal; }; 

这工作只要细如你记得PROPERTY宏切换当前的可见性,这是​​不愉快的。 ...

如:

protected: 
    int v1; 
    PROPERTY (int, v2) // fv2 is private with public accessors 
    int v3; // whoops. f3 is public, 
3

你为什么强迫它?它根本无助于编译器,它不会让客观上更容易让人阅读。 C/C++理念的一部分是,该语言不会制定任何不支持某种特性/功能的任意规则。

它使代码生成变得更容易。许多编码风格每个类不止一次地使用访问说明符 - 首先定义所有的本地类型,然后是所有的构造函数,然后是所有的方法,然后是所有的实例变量等等......

C++给你足够的绳索来拍摄自己在脚下,但它具有相同的灵活性,可以让您构建优雅,可维护,抽象的应用程序。

0

在“C++编程语言第3版”中,Stroustrup说这是为了使代码生成更容易。

尽管确实有意义的是,实际二进制文件中每个字段的位置是基于该字段在源代码中声明的顺序,所以这允许某人保持与C甚至其他语言的某种布局兼容性/眼镜。

相关问题