[英]constexpr const char * vs constexpr const char[]
[英]const constexpr char* vs. constexpr char*
我知道const和constexpr之間的區別。 一個是編譯時常量,另一個是編譯時或運行時常量。
但是,對於字符/字符串數組,我很困惑為什么編譯器抱怨一個用於另一個。
例如,我有:
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*
?
我希望A沒問題:S
const
告訴編譯器你不應該寫入你指向的字符。
constexpr
告訴編譯器您可以在編譯時完全評估存儲在這些數組中的指針。 但是,它沒有說明指針所指向的字符是否會發生變化。
順便說一下,你可以編寫這段代碼的另一種方法是:
const char * const B[2];
第一個const
適用於chars,第二個const
適用於數組本身及其包含的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.