我知道const和constexpr的区别。一个是编译时常量(compile time constant),另一个是编译时或运行时常量(either compile time or runtime constant)。
但是,对于字符/字符串数组,我不明白为什么编译器会抱怨使用其中之一。
例如,我有以下代码:
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
constexpr
适用于指针,使其成为“const”,但不适用于它所指向的对象。因此,这是少数几种需要结合使用const
和constexpr
的情况之一。 - David Gconstexpr char*
是一个char* const
。constexpr
关键字应用于对象的整个类型 -也就是它应用于声明-,const
是类型的修饰符。 - dyp