const int *p vs. int const *p - 型の後の 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

const を置く例のクラスがあります タイプの右側にも混乱を避けるのに役立ちます.

typedef にポインター型がある場合、to の constness を変更することはできません。 タイプ:

typedef int * PINT;
const PINT pi;

pi タイプ int * const はまだあります 、これは const をどこに書いても同じです .


スタイルとテクニックに関する B. Stroustrup の FAQ からのこの説明が明確な答えになることを願っています.

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;