有没有办法定义一个非动态构造函数,它限制了我允许的默认构造函数的范围
struct foo {
int *bar;
};
static __thread foo myfoo[10] = {nullptr};
即,我想做
class baz {
public:
baz() = default;
constexpr baz(decltype(nullptr)) : qux(nullptr) { }
private:
int *qux;
};
static __thread baz mybaz[10] = {nullptr};
并让它发挥作用。
目前,icpc告诉我
main.cpp(9): error: thread-local variable cannot be dynamically initialized
static __thread baz mybaz[10] = {nullptr};
^
答案 0 :(得分:0)
此:
static __thread baz mybaz[10] = {nullptr};
相当于:
static __thread baz mybaz[10] = {baz(nullptr), baz(), baz(), baz(), baz(), ..., baz()};
因为这是一般规则,数组元素的隐式初始化是默认构造函数。
所以要么这样做:
static __thread baz mybaz[10] = {nullptr, nullptr, nullptr, ..., nullptr};
或者使你的默认构造函数也是constexpr ...