6
我知道const和constexpr之間的區別。一個是編譯時間常量,另一個是編譯時間或運行時常量。const constexpr char *與constexpr char *
但是,對於字符/字符串數組,我很困惑爲什麼編譯器會抱怨正在使用另一個。
比如我有:
constexpr char* A[2] = {"....", "....."};
const constexpr char* B[2] = {"....", "....."};
帶有聲明 「A」,我得到:
ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
但聲明 「B」 我沒有得到任何警告。
爲什麼額外的const限定符會擺脫警告?無論如何,它們都不是「const char *」?我問,因爲兩者都是constexpr
,這應該默認爲const char*
?
我期待一個要罰款:S
'constexpr'適用於指針,使其成爲'const',但不是它指向的對象。所以這是少數情況下你可能需要結合'const'和'constexpr'的情況之一。 – 0x499602D2
'constexpr char *'是一個'char * const'。 'constexpr'說明符適用於整個對象的類型 - 也就是說,它適用於聲明 - ,'const'是一個限定符(類型)。 – dyp