在类型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.)?