问题标签 [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.
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
。
任何想法都值得赞赏。
c++ - 为什么这被认为是扩展的初始化列表?
使用 g++ 编译时,我收到以下警告:
警告:扩展初始化列表仅适用于 -std=c++0x 或 -std=gnu++0x [默认启用]
不过,据我所知,这只是一个普通的初始化列表。该结构是 POD 类型。
这是一个错误还是我错过了什么?
c++ - 何时使用 alloca 为类成员分配内存?
它是在主函数结束时释放还是在构造函数执行后立即释放?如果上面的代码按预期工作,那么有一个这样的字符串类是个好主意吗?
更新:
看起来主要的危险是
- 堆栈溢出
- 构造函数的内联
我认为我可以通过将 alloca 用于小尺寸并使用 malloc/free 用于大尺寸来处理 StackOverflow。我想必须有一些非便携式编译器特定的方式来强制编译器内联。
我很感兴趣,因为字符串类是在任何 c++ 项目中广泛使用的东西。如果我做对了,我预计会有巨大的性能提升,因为大多数分配都进入堆栈,否则会进入堆。这将是一个实用程序,最终用户不会知道内部结构。
c++ - 乱序初始化成员 - 可以吗?
从对此答案的评论:
类成员按其声明顺序进行初始化。按照这种逻辑,以下构造函数应该调用未定义的行为:
显然,我们在初始化b
之前分配给第一个。a
分配给未初始化的对象应该是 UB。代码“Bar = int
工作”Bar
与.b
a
(对于额外的疯狂,我们甚至可以说Foo(Bar c, Bar d) : a(b = c), b(d) { }
,仍然没有任何警告。)
然而 GCC 4.6.1 并没有对此发出警告。这是可接受的、定义明确的行为,还是完全错误?
c++ - initializer_list 和移动语义
我可以将元素移出 astd::initializer_list<T>
吗?
由于std::intializer_list<T>
需要特别的编译器注意并且没有像 C++ 标准库的普通容器那样的值语义,我宁愿安全也不愿道歉和问。
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)}
。
c++ - 由于构造函数初始值设定项列表的优化
如果可能,构造函数应通过初始化列表初始化其所有成员对象。它比通过构造函数体内的赋值来构建构造函数更有效。
有人可以解释一下,为什么在示例的帮助下使用初始化列表更有效?
c++ - 初始化一个类的静态非常量数据成员
我编写了以下示例代码:
我知道这会产生编译错误,因为静态数据成员不能在构造函数初始化列表中使用。
那么如何在每次创建类的对象时初始化静态数据成员呢?我希望从构造函数调用的静态成员函数可以做到这一点。这是唯一可能的方法吗?
c++ - 我可以列出初始化只移动类型的向量吗?
如果我通过我的 GCC 4.7 快照传递以下代码,它会尝试将unique_ptr
s 复制到向量中。
显然这行不通,因为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 尝试从初始化列表中复制指针是否正确?
c++ - 使用 c++0x 初始化器列表时出现 Seg 错误
当我将 c++0x 初始化器列表与向量一起使用时,我遇到了段错误。我不知道为什么会这样。我的调试器说崩溃发生在标准库中的这个函数上:
我试图确定此功能的用途,但在网上找不到任何解释/文档。
在我的代码中使用初始化列表的代码如下所示:
传递给此函数的数据结构在此处创建:
data_cache 结构是我自己用来避免复制的列表类。ProcessData 函数在与创建数据结构的线程不同的线程上调用。
这是调用堆栈的调试器输出:
我怀疑我的列表类可能是罪魁祸首,但即使是我也不知道为什么。希望 StackOverflow 上的人可以帮助我理解这个问题。我感谢任何意见或建议。