【发布时间】:2020-09-30 20:00:46
【问题描述】:
我正在 c++17 中实现一个类,它需要能够在编译时使用 constexpr 构造函数构造一个对象。该对象有一个数组成员,我似乎无法通过参数对其进行初始化。
我一直在尝试为此使用std::initializer_list,类似于:
#include <cstdint>
#include <initializer_list>
struct A {
char data[100];
constexpr A(std::initializer_list<char> s): data(s) {}
};
int main() {
constexpr A a{"abc"};
}
但这由于某种原因不起作用。
clang 6.0(也尝试过更高版本)告诉我我错了,尽管我正在做它所说的:
test_initializer_list.cpp:7:46: error: array initializer must be an initializer list or string literal
constexpr A(std::initializer_list<char> s): data(s) {}
(请注意,如果我直接给它一个字符串文字,例如data("abc"),它确实可以编译)
g++ (7.5.0) 说由于某种原因我不能使用初始化列表 - 但如果是这样,我可以使用什么?
test_initializer_list.cpp:7:52: error: incompatible types in assignment of 'std::initializer_list<char>' to 'char [100]'
constexpr A(std::initializer_list<char> s): data(s) {}
^
我做错了吗?
【问题讨论】:
-
是什么让你认为
"abc"是(或可以转换成)std::initializer_list<char>? -
@dfri - 谢谢,但不完全是,因为他们不需要 constexpr @Evg - 原则上你是对的,但试图把
{'a', 'b', 'c'}放在那里也不起作用。
标签: c++ constexpr initializer-list