问题标签 [initializer-list]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
7486 浏览

c++ - 避免调用成员变量的构造函数

我有以下 C++ 类:

我现在想避免class A调用. _ C m_C因为在最后一行A::A(),我无论如何都要初始化m_C自己,因为我需要先做好准备m_B。我可以为class B. 但这不是想法。

我已经尝试添加m_C(NULL)A::A(). 有时它有效,有时它说没有构造函数NULL作为参数。

那么我怎么能m_C保持未初始化呢?我知道使用指针,m_C(NULL)-way 有效。而且我不想使用动态分配它new

任何想法都值得赞赏。

0 投票
2 回答
14193 浏览

c++ - 为什么这被认为是扩展的初始化列表?

使用 g++ 编译时,我收到以下警告:

警告:扩展初始化列表仅适用于 -std=c++0x 或 -std=gnu++0x [默认启用]

不过,据我所知,这只是一个普通的初始化列表。该结构是 POD 类型。

这是一个错误还是我错过了什么?

0 投票
2 回答
681 浏览

c++ - 何时使用 alloca 为类成员分配内存?

它是在主函数结束时释放还是在构造函数执行后立即释放?如果上面的代码按预期工作,那么有一个这样的字符串类是个好主意吗?

更新:

看起来主要的危险是

  1. 堆栈溢出
  2. 构造函数的内联

我认为我可以通过将 alloca 用于小尺寸并使用 malloc/free 用于大尺寸来处理 StackOverflow。我想必须有一些非便携式编译器特定的方式来强制编译器内联。

我很感兴趣,因为字符串类是在任何 c++ 项目中广泛使用的东西。如果我做对了,我预计会有巨大的性能提升,因为大多数分配都进入堆栈,否则会进入堆。这将是一个实用程序,最终用户不会知道内部结构。

0 投票
1 回答
219 浏览

c++ - 乱序初始化成员 - 可以吗?

从对此答案的评论:

类成员按其声明顺序进行初始化。按照这种逻辑,以下构造函数应该调用未定义的行为:

显然,我们在初始化b之前分配给第一个。a分配给未初始化的对象应该是 UB。代码“Bar = int工作”Bar与.ba

(对于额外的疯狂,我们甚至可以说Foo(Bar c, Bar d) : a(b = c), b(d) { },仍然没有任何警告。)

然而 GCC 4.6.1 并没有对此发出警告。这是可接受的、定义明确的行为,还是完全错误?

0 投票
8 回答
22696 浏览

c++ - initializer_list 和移动语义

我可以将元素移出 astd::initializer_list<T>吗?

由于std::intializer_list<T>需要特别的编译器注意并且没有像 C++ 标准库的普通容器那样的值语义,我宁愿安全也不愿道歉和问。

0 投票
1 回答
119 浏览

c++ - 模板初始化列表 - 为什么查找失败

给定

为什么 gcc 4.6 会产生错误

error: no matching function for call to ‘foo(<brace-enclosed initializer list>, <brace-enclosed initializer list>)'

note: candidate is

note: template<class T1, class T2, class T3> void foo(std::initializer_list<std::pair<T1, T2> >, std::initializer_list<T3>)

立即更新 适用于

被添加并{{1,2},{3,4}}替换为{p(1,2), p(3,4)}

0 投票
8 回答
3826 浏览

c++ - 由于构造函数初始值设定项列表的优化

如果可能,构造函数应通过初始化列表初始化其所有成员对象。它比通过构造函数体内的赋值来构建构造函数更有效。

有人可以解释一下,为什么在示例的帮助下使用初始化列表更有效?

0 投票
4 回答
4448 浏览

c++ - 初始化一个类的静态非常量数据成员

我编写了以下示例代码:

我知道这会产生编译错误,因为静态数据成员不能在构造函数初始化列表中使用。

那么如何在每次创建类的对象时初始化静态数据成员呢?我希望从构造函数调用的静态成员函数可以做到这一点。这是唯一可能的方法吗?

0 投票
5 回答
19656 浏览

c++ - 我可以列出初始化只移动类型的向量吗?

如果我通过我的 GCC 4.7 快照传递以下代码,它会尝试将unique_ptrs 复制到向量中。

显然这行不通,因为std::unique_ptr不可复制:

错误:使用已删除的函数 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete; std::unique_ptr<_Tp, _Dp> = std::unique_ptr]'

GCC 尝试从初始化列表中复制指针是否正确?

0 投票
2 回答
938 浏览

c++ - 使用 c++0x 初始化器列表时出现 Seg 错误

当我将 c++0x 初始化器列表与向量一起使用时,我遇到了段错误。我不知道为什么会这样。我的调试器说崩溃发生在标准库中的这个函数上:

我试图确定此功能的用途,但在网上找不到任何解释/文档。

在我的代码中使用初始化列表的代码如下所示:

传递给此函数的数据结构在此处创建:

data_cache 结构是我自己用来避免复制的列表类。ProcessData 函数在与创建数据结构的线程不同的线程上调用。

这是调用堆栈的调试器输出:

我怀疑我的列表类可能是罪魁祸首,但即使是我也不知道为什么。希望 StackOverflow 上的人可以帮助我理解这个问题。我感谢任何意见或建议。