【发布时间】:2022-01-03 09:58:31
【问题描述】:
以下代码编译:
#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适用于指针本身,而不适用于它所指向的东西,它应该是constexpr const char* str -
@Kaldrr 啊哈我明白了。现在有没有办法让类型本身
constexpr?我的意思是constexpr (constexpr char*) str?这样做有什么好处吗? -
简答,不。
constexpr并不是真正的 C++ 类型系统的一部分,没有指向constexpr变量的特定类型的指针,只有指针本身是constexpr。改用指向const的指针,因为constexpr暗示变量为const -
@Kaldrr 感谢您的信息。我不知道。
标签: c++ gcc compiler-warnings constexpr string-literals