簡體   English   中英

const constexpr char *與constexpr 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM