首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用icpc的c++中的非动态构造函数?

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

Stack Overflow用户
提问于 2012-11-12 07:30:07
回答 1查看 370关注 0票数 1

有没有一种方法可以定义一个非动态构造函数来限制默认构造函数的范围

代码语言:javascript
复制
struct foo {
  int *bar;
};
static __thread foo myfoo[10] = {nullptr};

也就是说,我想做的是

代码语言:javascript
复制
class baz {
  public:
    baz() = default;
    constexpr baz(decltype(nullptr)) : qux(nullptr) { }

  private:
    int *qux;
};
static __thread baz mybaz[10] = {nullptr};

让它正常工作。

目前,icpc告诉我

代码语言:javascript
复制
main.cpp(9): error: thread-local variable cannot be dynamically initialized
  static __thread baz mybaz[10] = {nullptr};
                      ^
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-18 05:48:36

这一点:

代码语言:javascript
复制
static __thread baz mybaz[10] = {nullptr};

等同于:

代码语言:javascript
复制
static __thread baz mybaz[10] = {baz(nullptr), baz(), baz(), baz(), baz(), ..., baz()};

因为这是默认情况下数组元素的隐式初始化是构造函数的一般规则。

因此,要么这样做:

代码语言:javascript
复制
static __thread baz mybaz[10] = {nullptr, nullptr, nullptr, ..., nullptr};

或者让你的默认构造函数也常量表达式...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13336609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档