问题标签 [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 投票
1 回答
2351 浏览

c++ - 使用多维 std::initializer_list

我对在 C++ 中使用多维 std::initializer_list 有疑问。我有一个 Matrix 类,我希望能够像这样初始化它:

我现在拥有的构造函数采用二维初始化列表的参数,但编译器不喜欢我使用它的方式。这是代码:

这是错误:

我该如何摆脱这个错误?有没有办法重组它,这样我就不必制作初始化列表或其他东西的丑陋向量?

0 投票
3 回答
500 浏览

c++ - 又一个 C++ 对象初始化询问

我有这个类,它有许多类成员和许多不同的构造函数。

到目前为止,我在我拥有的每个构造函数中都使用了一个构造函数初始化列表,以我想要的方式调整每个成员。

这相当繁琐,因为每次我向类中添加新成员时,我都必须访问每个构造函数并更新初始化列表以向该成员添加默认值。

所以,我想我会添加一个方法来初始化我需要的值。问题!由于该方法是在初始化列表之后执行的,因此我放入此初始化列表中的特定值将被我的方法覆盖。

快速示例:

所以,我的问题是:我可以混合使用列表初始化器和方法初始化器,以便列表初始化器优先于方法初始化器吗?
在上面的示例中,我希望 m1 保留true最后一个构造函数。

注意:我知道我可以在方法调用之后移动初始化列表,但这意味着我会为成员分配两次值:一次init_members(),然后在构造函数中覆盖它。不够优化:-)

我希望有一些小技巧,如果你有库存的话。

0 投票
3 回答
31992 浏览

c++ - 何时使用大括号封闭的初始化程序?

在 C++11 中,我们拥有用于初始化类的新语法,这为我们提供了如何初始化变量的大量可能性。

对于我声明的每个变量,我必须考虑应该使用哪种初始化语法,这会减慢我的编码速度。我确信这不是引入大括号的意图。

说到模板代码,改变语法会导致不同的含义,所以走对路是必不可少的。

我想知道是否有一个应该选择哪种语法的通用准则。

0 投票
4 回答
6882 浏览

c++ - 来自 initializer_list 的三元运算符 + C++11 构造函数

在开发应用程序时,我遇到了以下问题。当给定的函数指针为空时,我想返回一个空std::list<string>值,否则返回该函数的结果。这是我的代码的简化版本:

但是,我通常喜欢?:在这些情况下使用三元 ( ) 运算符,所以我尝试以这种方式使用它(像往常一样):

但是得到了这个错误:

这是否意味着我不能使用三元运算符来返回使用它们的构造函数创建的对象initializer_list?有什么特别的原因吗?

0 投票
6 回答
75961 浏览

c++ - 我可以在初始化列表中用 10 个相同的整数初始化 STL 向量吗?

我可以在初始化列表中用 10 个相同的整数初始化 STL 向量吗?到目前为止,我的尝试都失败了。

0 投票
1 回答
195 浏览

c++ - 初始化列表中的序列点警告

我有一个 Parent 类,它接受两个引用,这些引用可能实际上是对同一事物的引用,也可能不是。在这种情况下,当它们相同时,我会在 Child 类的初始化程序列表中收到序列点警告:

我猜这是因为在分配内存后不能保证该行上的取消引用。无论如何,我的问题是,在不更改父级或 A 的情况下,是否存在这种情况?

0 投票
2 回答
1372 浏览

c++ - 这是偏函数模板专业化吗?

我在回答这个问题后想出了这个

我有一个简单的函数模板(C++11):

但是 GCC 发出警告,因为它似乎不喜欢将模板参数推断为 std::initializer_list。所以,不假思索,我做了一个专业化:

这行得通。没有更多的警告。但是当我再次查看并考虑时,我记得 C++ 不支持函数模板上的部分模板特化。但这似乎就是这样。我唯一的猜测是这是允许的,因为 std::initializer_list 仍然依赖于模板参数,所以它本质上是一个不同的模板。但是我不确定这是否应该是这样(没有关于模板不重载的问题吗?)。

接受这一点是标准行为吗?为什么?

作为一个额外的问题,为什么 GCC 不喜欢将模板参数推断为 std::initializer_list?期望我复制和粘贴代码并用 std::initializer_list 替换参数似乎很愚蠢。

警告信息:

当被调用时in_list(3, {1, 2, 3, 4, 5});

编辑:显然,将模板参数推断为 initializer_list 是根据我的 GCC 版本(引用)的工作草案的扩展。所以新的问题:这仍然是最终 c++11 标准的扩展吗?如果是这样,这意味着我有必要为符合标准的代码添加第二个函数。感谢你的帮助!

EDIT2: GCC 4.7 的编译器方言标志似乎已被删除,因此问题似乎已解决,但我不知道它是如何解决的。

0 投票
1 回答
1247 浏览

c++ - gcc:缺乏关于构造函数中初始化顺序的警告

gcc 是否应该警告成员变量abC 类中的初始化顺序?基本上,对象 b 已初始化,并且在对象 A 之前调用它的构造函数。这意味着b使用未初始化的a.

来自 gcc 的输出:

0 投票
3 回答
5921 浏览

c++ - 为什么我不能用统一初始化初始化初始化列表中的引用?

也就是说,为什么会这样:

给我一个 GCC 4.7 的编译器错误:

?

要修复错误,我必须s{s}s(s). 这不会破坏统一初始化的统一性吗?

编辑:我尝试了 clang,并且 clang 接受了它,所以也许这是一个 GCC 错误?

0 投票
1 回答
189 浏览

c++ - 模板内的 C++ 初始值设定项列表

我想更多地了解 C++11,所以我编写了我所知道的最简单的 initializer_list 测试,但是在模板内部,这是一个“免费”函数,每次编译时都会出现此错误(clang++ 用于漂亮的格式化)

这是代码:

这就是它的名字:

我不知道为什么会发生这种情况,有什么建议吗?