c ++中使用icpc的非动态构造函数?

时间:2012-11-11 23:30:07

标签: c++ c++11 thread-local default-constructor icc

有没有办法定义一个非动态构造函数,它限制了我允许的默认构造函数的范围

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

1 个答案:

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