1

有没有办法定义一个非动态构造函数来限制默认构造函数的范围让我做

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};
                      ^
4

1 回答 1

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 ...

于 2012-11-17T21:48:36.403 回答