constexpr 在与字符串文字一起使用时会导致 GCC 警告
constexpr causes a GCC warning when used with string literal
编译以下代码:
#include <iostream>
int main( )
{
const char* const str = "This is a constant string.";
std::cout << str << '\n';
}
然而,这个给出警告:
constexpr char* const str = "This is a constant string.";
这里:
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
37 | constexpr char* const str = "This is a constant string.";
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是 GCC 中的错误吗?我正在将字符串转换为指向 constexpr char
数组的指针。此警告有效吗?
现在使指针本身 constexpr
根本无法编译它:
const char* constexpr str = "This is a constant string.";
这里:
error: expected unqualified-id before 'constexpr'
37 | const char* constexpr str = "This is a constant string.";
| ^~~~~~~~~
为什么指针不能是 constexpr?
在这里是否使用constexpr 不是问题。您正在尝试将字符串文字存储在 char* const 中,它不是指向不可变数据(字符串文字是)的指针,而是具有常量地址的指针。字符串文字可以存储为 const char* 或 const char* const。
const char* str = "This is a constant string."
添加 constexpr 如下所示:
constexpr const char* str = "This is a constant string."
编译以下代码:
#include <iostream>
int main( )
{
const char* const str = "This is a constant string.";
std::cout << str << '\n';
}
然而,这个给出警告:
constexpr char* const str = "This is a constant string.";
这里:
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
37 | constexpr char* const str = "This is a constant string.";
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是 GCC 中的错误吗?我正在将字符串转换为指向 constexpr char
数组的指针。此警告有效吗?
现在使指针本身 constexpr
根本无法编译它:
const char* constexpr str = "This is a constant string.";
这里:
error: expected unqualified-id before 'constexpr'
37 | const char* constexpr str = "This is a constant string.";
| ^~~~~~~~~
为什么指针不能是 constexpr?
在这里是否使用constexpr 不是问题。您正在尝试将字符串文字存储在 char* const 中,它不是指向不可变数据(字符串文字是)的指针,而是具有常量地址的指针。字符串文字可以存储为 const char* 或 const char* const。
const char* str = "This is a constant string."
添加 constexpr 如下所示:
constexpr const char* str = "This is a constant string."