型での 2 回の使用const
は、C++ 2003 では違法ですが、C++ 2011 では合法です (7.1.6.1 [decl.type.cv] 段落 1:「冗長な cv-qualifications は無視されます。」を参照してください)。使用したとき
static const TYPE const name[5];
あなたはTYPE
定数を2回作りました。ただし、宣言const
時にオブジェクトを初期化する必要があるため、この宣言は C++ 2011 でも違法であることに注意してください。の意味
const TYPE
と
TYPE const
は完全に同等です。どちらの場合も、TYPE
オブジェクトを定数にします。一貫性を保つconst
ために、トップレベルの型を除くすべての型を右側に配置する必要があるため、常にconst
右側に配置します (コーディング ガイドラインで別の方法が義務付けられている場合を除きますが、私はばかげたコーディング ガイドラインと戦っています)。
ポインターを使用すると、考え方が異なります。関連する 2 つの型があります: 型を指す型とポインターです。これらはそれぞれconst
個別に作成できます。
TYPE const* ptr1(0); // non-const pointer to const TYPE
TYPE* const ptr2(0); // const pointer to non-const TYPE
TYPE const* const ptr3(0); // const pointer to const TYPE
何が作成されているかを理解する最善の方法はconst
、型宣言を右から左に読むことです。もちろん、これはconst
修飾子が正しい場所に配置されていることを前提としています。const
上記の議論でvolatile
またはで置き換えることができconst volatile
、同じ理由が適用されます。