问题标签 [stdinitializerlist]

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 投票
2 回答
1564 浏览

c++ - 为什么这个 initializer_list 在传递字符串时会使用不当行为?

我已经尝试了我的 G++ 版本的 C++0x 初始化器列表实现,但它只输出空行。

我不知道我做错了什么。谁能帮帮我?

0 投票
1 回答
171 浏览

c++ - 如何在 ChaiScript 中使用用户类型的 std::initializer_list 调用构造函数?

我有下一个定义类:

我在 ChaiScript v6.0.0 中注册了我的自定义类及其构造函数,如下所示:

我有下一个脚本:

script1script2运行没有问题,但script3给我下一个执行错误:

MyType(std::initializer_list<MyType>)从 ChaiScript调用构造函数的正确方法是什么?

0 投票
1 回答
144 浏览

c++ - 带有许多用于测试的元素的长 std::initializer_list

我的班级需要对其一个数据成员的元素数量施加上限,该成员恰好是一个容器。

我的类的构造函数之一将 std::initializer_list 作为参数来初始化该容器数据成员。

单元测试需要验证上限是否到位。为此,我需要尝试使用包含 1025 个元素的初始化列表来调用我的构造函数。

有没有比在测试代码中有一个包含 1025 个元素的大括号文字列表更好(= 更易读)的方法来创建这个 1025 个元素的 initializer_list?

(元素的数据类型总是无符号短(uint16_t),我的类不是模板。)

0 投票
1 回答
348 浏览

c++ - 将常量文字数组传递给函数而不将其声明为变量

我有一个代表一个值的类,并且可以假定单个数字、单个字符串、值数组或键值对映射的值。

这是当前的定义:

我只对从编译时给出的值实例化这个类感兴趣......出于我的目的,它永远不会在运行时以变量作为参数来调用。

由于 中的构造函数Foo,在编译时指定的任何文字值都会自动类型转换为 a Foo,然后我可以以几乎类似于 json 的方式指定文字,例如:

但是,如您所见,需要注意的是,我似乎需要显式转换为 std::vector 以支持数组类型。在 C++11 中有什么方法可以将某种类型的文字数组传递给函数,以便我可以 template<size_t N> Foo::Foo(const Foo (&arg)[N])适当地调用?我非常喜欢这个,因为要求显式向量转换感觉很尴尬,而且与自动转换其类型的其他构造函数绝对不是同质的。我想知道是否有任何其他方式可以利用智能自动类型转换以更统一和简洁的方式进行?

我以前见过这样的代码:

可以用字符串文字调用哪个,因此从概念上讲,似乎存在理解编译时文字数组的机制,但是有没有办法指定除 之外的类型的常量数组char

0 投票
1 回答
2054 浏览

c++ - 初始化 std::array 时通过 std::initializer_list 初始化 std::pair 不起作用?

我想初始化std::array一个std::pairvia std::initializer_list

为什么我的第三个选项不起作用?此外,这也很好用:

0 投票
1 回答
493 浏览

c++ - 是否可以从函数返回 std::initializer_list ?

以下作品:

我可以验证列表的内容是否正确。

但是,如果我将成员更改v为 a std::vector,它将不起作用:

在这种情况下,返回的列表包含垃圾值。

我知道标准说复制 a 时不会复制底层对象std::initializer_list。这是这里发生的事情吗?

为什么它在第一个示例中起作用?是运气吗?当列表中的对象包含 a 时,是否有什么特别之处std::vector

0 投票
0 回答
570 浏览

c++ - 如何使用 std::initializer_list 和 std::pair Json 对象构造函数?

我想创建一个构造函数,那就是通过传递创建 Json 对象。

这是初始化对象列表

并显示好,输出:

但我想构造嵌套的 json 对象,如下所示?我怎样才能做到这一点?

我想要的示例 jsonobject,键是字符串,但值类型可变,例如 int、double、string、float、char 或任何已知数据类型

0 投票
1 回答
1168 浏览

c++ - 为什么这个宏被传递了三个参数?

错误是:

我在 Visual Studio 上花了很长时间才试图弄清楚发生了什么。直到我在使用 GCC 的在线编译器上编译时,我才得到一个更具描述性的错误:

错误:宏“push”传递了 3 个参数,但只需要 1 个

我想我很困惑,因为我认为 std::initializer_list 是一个结构,应该作为一个传递。当它抱怨将 3 个参数传递给宏时,它是在说 push({1, 2, 3}); 我正在做相当于 push(1, 2, 3);? 这似乎 std::initializer_list 在解析宏时在预编译器阶段之前对其元素进行了一种扩展。我不明白这是为什么。另外,我尝试将它包装在另一组括号中并且它有效:

0 投票
2 回答
198 浏览

c++ - 如何使用带有构造函数的初始化列表的异常处理?

我曾经initialization list通过 Constructor 使用,一切都很顺利。但现在我需要一些exception handling在我的班。

所以这里有一些示例代码:

1-没有异常处理

上面的构造函数不检查是否传递了无效的大小,还是new失败了......

现在我编辑了构造函数来处理异常:

2- 异常处理:

  • 现在的问题是:它们是排他性的吗?- 我的意思是如何通过构造函数将异常处理与初始化列表混合在一起?
0 投票
2 回答
5216 浏览

c++ - std::initializer_list 构造函数

在这样的代码中:

为什么它调用std::initializer_list<int>构造函数的规范?如果我们定义例如构造函数,它将产生歧义编译错误std::initializer_list<double>。这种构造的规则是什么,为什么std::initializer_list用数字作为模板参数如此具体?