为什么我需要定义一个已在声明中初始化的constexpr成员?

时间:2017-04-29 18:56:48

标签: c++

为什么必须在类声明之外再次定义完全初始化的constexpr成员?

这不是多余的,因为它是静态的,常量的并且已经在声明中完全初始化了吗?

这是一个例子。我正在使用C ++ 17

#include <iostream>

struct Settings {
    static constexpr const char * str[2] = {"Hello 1", "Hello 2"};
};

void print(int i) {
    printf("%s\n", Settings::str[0]); // Does not need a definition
    printf("%s\n", Settings::str[i]); // Needs a definition
}

int main() {
    print(1);
    return 0;
}

该行:

printf("%s\n", Settings::str[i]);

生成此错误:

undefined reference to `Settings::str'

但不是这句话:

printf("%s\n", Settings::str[0]);

由于

0 个答案:

没有答案