C++ 字符串字面值和常量

3

在提问之前,我阅读了之前的问题,但问题有所不同。我正在我的类中使用这个:

static constexpr char* kSuffix = "tos";

使用gcc和c++11编译时,我遇到了以下错误:

error: ISO C++ forbids converting a string constant to 'char*' [-Werror=write-strings]

但是 constexprconst 更加严格,所以一个 constexpr 必须是一个 const,但反过来则不成立。所以我想知道为什么在这种情况下 gcc 没有识别出 constexpr


这个回答解决了你的问题吗?const constexpr char* vs. constexpr char* - JaMiT
或许constexpr const vs constexpr variables更适合作为重复内容? - JaMiT
1个回答

4

因此,constexpr 必须是一个 const

请注意,constexpr 是在 kSuffix 本身上进行限定的,所以指针变为了 const(即 char* const),但指向物并不会变为 const(即 const char*)。GCC 希望告诉您,应该将 kSuffix 声明为指向 const 的指针,即

static constexpr const char* kSuffix = "tos";

constexpr 没有在 kSuffix 上进行限定吗? - fluter
@fluter 是的。我修改了答案,现在更清晰了吗? - songyuanyao
我仍然想知道为什么constexpr在这里取代了const,它们本质上处于相同的位置。 - fluter
@fluter 最好将 constexprconst 视为不同的东西;例如,我们可以声明一个 const 指针,如 char* const,以及指向 const 的指针,如 const char*,但我们只能编写 constexpr char*(或 constexpr const char*),这意味着一个 constexpr 指针。(还要注意的是,我们不能编写类似于 char* constexpr 的东西。) - songyuanyao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接