const constexpr char* vs. 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
适用于字符,第二个const
适用于数组本身和它包含的指针。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- 带有 char[] 字段的 POD 结构的 constexpr 构造
- 为什么这两段使用 constexpr、__PRETTY_FUNCTION__ 和 char * 的代码有不同的结果?
- 有什么陷阱用 constexpr string_view 替换全局 const char[]?
- 无法声明静态 constexpr char []
- 将 'hana::string' 转换为 'constexpr const char (&)[]'
- 通过 constexpr 中的 'const char *' glvalue 访问字符串文字的值会出错
- 列出<Char>C++中键入的 constexpr 字符串
- constexpr static std::array<const char *,5> 无法使用 MSVC2013 进行编译
- 预处理器检查 constexpr const char* 函数
- 警告:ISO C++禁止将静态“constexpr char*”数据成员的字符串常量转换为“char*”
- 链接器错误(未定义的引用)与“静态 constexpr const char*”和完美转发
- 使用 const char 数组参数分析 constexpr 显示运行时执行
- static_assert 无法将 const char* 模板参数识别为 constexpr:g++ 错误?
- constexpr char[] 作为类成员有什么好处
- constexpr const char * vs constexpr const char[]
- 对静态constexpr char[]的未定义引用
- const constexpr char* vs. constexpr char*
- 字符串字面值与constexpr char数组的区别