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."