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