是C ++中每个类成员之前的可接受的使用访问说明符

时间:2017-01-26 12:27:23

标签: c++

我写了一些代码c ++

public class SomeClass 
{
private: 
   int m_CurrentStatus;
   int m_PreviouseStatus;
public:
   int get_CurrentStatus() { return m_CurrentStatus; }
   int get_PreviouseStatus() { return m_PreviouseStatus; }
}

in c#style

public class SomeClass 
{
private:  int m_CurrentStatus;
private:  int m_PreviouseStatus;
public:   int get_CurrentStatus() { return m_CurrentStatus; }
public:   int get_PreviouseStatus() { return m_PreviouseStatus; }
}

每个成员之前的这种用法访问说明符是可以接受的吗? 或者麻烦编译器花费更多时间进行编译或其他效果? 代码编译成功,没有任何警告。

5 个答案:

答案 0 :(得分:4)

您所描述的是合法的C ++。

对编译时间的影响取决于编译器。但实际上,您可能很难发现编译时间的任何差异。

对代码可读性可能有影响或有益 - 即人类理解正在发生的事情的能力。一般来说,人们更喜欢"部分" (例如,在单个访问修饰符(publicprivateprotected)之后声明几个成员),只要这些部分不会变得太大(例如,在编辑代码时填充多个屏幕)。因此,按照您的方式进行操作可能不受其他开发人员的欢迎。这是非常主观的 - 不同的人会有不同的偏好。但是,如果您发现其他人反对您的方法,请听取他们的意见 - 除非您乐意与其他团队成员不相称,失去工作等等。

对班级中数据成员的布局可能会有影响,也可能没有影响。不同版本的C ++标准提供了不同的保证,但编译器有相当大的自由来布置不同的类。如果您编写的代码依赖于(或测试)特定的类布局(数据成员的顺序,偏移等),您可能会发现差异。或者你可能不会。但是,这些事情在实现(编译器)之间是允许的,因此编写依赖于特定布局的代码通常是一个坏主意。

答案 1 :(得分:1)

这是合法的语法,不应该扰乱编译器,你可以拥有任意数量的公共和私有块。我不认为它在语法上是一种改进。

答案 2 :(得分:1)

这是C ++完全合法的语法,
public之前的class关键字外 并且在类的右大括号之后缺少分号(;)。

但是我从来没有见过这样的东西,我想它肯定不常用,而且在我看来,它对代码的可读性没有任何影响(相反,我个人觉得阅读起来比较麻烦)。

答案 3 :(得分:1)

它确实是合法的,并且在每个类成员之前放置访问说明符,免于编译时间的惩罚。你也可以在每一行的末尾加上50个分号。它根本不是规范的C ++。

答案 4 :(得分:1)

这是合法的,也是非常正确的。如果您希望公开您的成员,您将不会使用面向对象的语言。面向对象编程的基本用法是信息隐藏。

在你的情况下(在时间问题上)唯一可以解决编译器问题的是你的功能块在类中。

我的意思是什么?

如果你有一个main.cpp和一个class.h,你的函数在class.h中被声明和定义,你的编译会花费更长的时间,而不是你的函数体是在functions.cpp中