我写了一些代码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; }
}
每个成员之前的这种用法访问说明符是可以接受的吗? 或者麻烦编译器花费更多时间进行编译或其他效果? 代码编译成功,没有任何警告。
答案 0 :(得分:4)
您所描述的是合法的C ++。
对编译时间的影响取决于编译器。但实际上,您可能很难发现编译时间的任何差异。
对代码可读性可能有影响或有益 - 即人类理解正在发生的事情的能力。一般来说,人们更喜欢"部分" (例如,在单个访问修饰符(public
,private
或protected
)之后声明几个成员),只要这些部分不会变得太大(例如,在编辑代码时填充多个屏幕)。因此,按照您的方式进行操作可能不受其他开发人员的欢迎。这是非常主观的 - 不同的人会有不同的偏好。但是,如果您发现其他人反对您的方法,请听取他们的意见 - 除非您乐意与其他团队成员不相称,失去工作等等。
对班级中数据成员的布局可能会有影响,也可能没有影响。不同版本的C ++标准提供了不同的保证,但编译器有相当大的自由来布置不同的类。如果您编写的代码依赖于(或测试)特定的类布局(数据成员的顺序,偏移等),您可能会发现差异。或者你可能不会。但是,这些事情在实现(编译器)之间是允许的,因此编写依赖于特定布局的代码通常是一个坏主意。
答案 1 :(得分:1)
这是合法的语法,不应该扰乱编译器,你可以拥有任意数量的公共和私有块。我不认为它在语法上是一种改进。
答案 2 :(得分:1)
这是C ++完全合法的语法,
除public
之前的class
关键字外
并且在类的右大括号之后缺少分号(;
)。
但是我从来没有见过这样的东西,我想它肯定不常用,而且在我看来,它对代码的可读性没有任何影响(相反,我个人觉得阅读起来比较麻烦)。
答案 3 :(得分:1)
它确实是合法的,并且在每个类成员之前放置访问说明符,免于编译时间的惩罚。你也可以在每一行的末尾加上50个分号。它根本不是规范的C ++。
答案 4 :(得分:1)
这是合法的,也是非常正确的。如果您希望公开您的成员,您将不会使用面向对象的语言。面向对象编程的基本用法是信息隐藏。
在你的情况下(在时间问题上)唯一可以解决编译器问题的是你的功能块在类中。
我的意思是什么?
如果你有一个main.cpp和一个class.h,你的函数在class.h中被声明和定义,你的编译会花费更长的时间,而不是你的函数体是在functions.cpp中