在類型上使用const
兩次在C++ 2003中是非法的,但在C++ 2011中是合法的(參見7.1.6.1 [decl.type.cv]第1段:「忽略冗餘cv資格)」。當你使用
static const TYPE const name[5];
你讓TYPE
不斷兩次。但請注意,此聲明在C++ 2011中也是非法的,因爲在聲明它時需要初始化一個const
對象。的
const TYPE
和
TYPE const
意思是絕對等同的:在這兩種情況下,你讓TYPE
對象不變。爲了保持一致性,我總是把const
放在正確的位置,因爲除頂級類型const
之外的每一個都必須放在右側(當然,除非某些編碼指南的要求不同,但我正在與愚蠢的編碼準則打交道)。
當使用指針時,認爲會變得不同。有兩種類型:類型指向類型和指針。它們中的每一個可以另行製作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
限定符被放置在正確的位置。在上面的討論中,您可以用volatile
或const volatile
代替const
,並且適用相同的推理。
感謝您的快速回復。我會標記這個正確的明天。 – Jim