在类型ID可接受后,C ++中的“const”是什么?

我的同事在他所启发的问题上是2(0,1),所以我想我会给他一个追上的机会。

我们最近的不同意见是关于在声明中放置“const”的风格问题。

他认为它应该在类型前面,或者在指针后面。 理由是这是其他人通常所做的事情,其他风格可能会令人困惑。 因此,指向常量int的指针和指向int的常量指针将分别为:

const int *i;
      int * const i;

不过,我很困惑。 我需要一致且易于理解的规则,而我能理解“const”的唯一方法是它追踪它正在修改的内容。 有一个例外,它允许它在最终类型前面,但这是一个例外,所以如果我不使用它,对我来说更容易。

因此,指向常量int的指针和指向int的常量指针将分别为:

int const * i;
int * const i;

作为一个额外的好处,这样做的事情使得更深层次的间接性更容易理解。 例如,一个指向int的常量指针的指针显然是:

int * const * i;

我的观点是,如果有人按照自己的方式学习,那么他们就很难弄清楚上述的结果。

这里最终的问题是,他认为在int之后加const是非常难以理解的丑陋,并且对可读性有害,以至于它应该在风格指南中被禁止。 当然,我认为如果任何指南应该建议按照我的方式来做,但无论哪种方式,我们都不应该禁止一种方法。

编辑:我收到了很多很好的答案,但没有一个真的直接解决了我的最后一段(“最终问题”)。 很多人争论的是一致性,但在这种情况下,这样做是否可取,禁止采取其他方式是一个好主意,而不是让它失望?


最重要的是一致性 。 如果没有任何编码准则,请选择一个并坚持下去。 但是,如果你的团队已经有了事实上的标准,不要改变它!

也就是说,我认为更常见的是

const int* i;
int* const j;

因为大多数人写

const int n;

代替

int const n;

附注 - 读取指针const的简单方法是从右侧读取声明。

const int* i; // pointer to an int that is const
int* const j; // constant pointer to a (non-const) int
int const* aLessPopularWay; // pointer to a const int

有一类将常量放在类型右侧的例子也有助于避免混淆。

如果你在typedef中有一个指针类型,那么就不可能改变类型的常量:

typedef int * PINT;
const PINT pi;

'pi'仍然具有'int * const'类型,并且无论您在哪里写'const',这都是一样的。


我希望B.Stroustrup关于风格与技巧的常见问题的解释能给你一个明确的答案。

Bjarne Stroustrup的C ++风格和技巧常见问题


我个人喜欢:

int const* pi;
int* const pi;

因为const标识了打算是const的左标记。

在使用这样的smth时,你绝对保持相同的一致性:

int const* const pi;

不一致地写:

const int* const pi;

如果你有一个指向指针的指针等等会发生什么:

int const* const* const pi;

代替:

const int* const* const pi;

问候,

Ovanes

链接地址: http://www.djcxy.com/p/21241.html

上一篇: In C++ is "const" after type ID acceptable?

下一篇: Default visibility for C# classes and members (fields, methods, etc.)?