【发布时间】:2019-06-12 23:17:17
【问题描述】:
为什么这段代码会返回警告
警告:ISO C++ 禁止将字符串常量转换为“char*” [-Wwrite-strings]
如果
在对象声明或非静态中使用的 constexpr 说明符 成员函数(C++14 前)暗含 const。在函数或静态成员变量(C++17 起)声明中使用的 constexpr 说明符意味着内联。
#include <cassert>
#include <string>
#include <iostream>
struct A
{
// warning: ISO C++ forbids converting a string constant to ‘char*’
static constexpr char* name_ = "A";
static constexpr char* name() { return name_; };
};
int main()
{};
如果我在constexpr 之后添加const,警告就消失了:
#include <cassert>
#include <string>
#include <iostream>
struct A
{
static constexpr const char* name_ = "A";
static constexpr const char* name() { return name_; };
};
int main()
{};
与g++ --version = g++ (GCC) 8.2.1 20181127,
编译g++ -O3 -std=c++2a -Wall main.cpp -o main。
constexpr 是否不暗示 const 对 static 数据成员?
【问题讨论】:
标签: c++ c++11 static constexpr