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

c++11 - 如何将 auto 与大括号初始化混合以正确返回 std::pair?

我有这个例子,它是一个函数,它返回一个std::pair包含字符串值及其大小的函数。

  • 为什么第一个初始化pair按预期返回 a 但第二个p2不是 apair而是一个initializer_list

  • 如您p3所见,只要我明确提供了类型,就可以正常工作(返回一对)!?

  • 类型说明符有问题auto吗?

  • p4适用于decltype.

0 投票
0 回答
113 浏览

c++ - 静态 std::initializer_list 的初始化导致 VS2015 更新 3 警告 C4592

我需要静态 std::initializer_list 来参数化我的 gtest 模板夹具。因此,对于任何经过测试的类型,我都需要初始化夹具成员,如下所示(最后一行):

但是它会触发以下警告:

我发现了这个问题: 错误 C4592:符号将被动态初始化。VS2015.1 static const std::vector 字段 和许多其他主题,但都涉及更新 1 中的错误。

因此我仍然无法理解我做错了什么?我应该忽略并禁用此警告还是有办法修复它?测试通过并表现得完全符合我的要求。(在实际测试中,我使用这个静态初始化列表来实际使用 std::initializer_list 的构造函数初始化对象,上面的代码只是缩短的示例)

我已经使用这种类型化测试技术的参数化很长时间了,还没有遇到过这种情况,但这是第一次使用 std::initializer_list

0 投票
1 回答
131 浏览

c++ - 使用 -std=c++14/-std=c++17 的 std::initializer_list 程序的相同clang,不同的结果

首先这是一个好奇的问题,在现实生活中我永远不会写这样的代码。

以下代码与 -O3 -std=c++14 和 -O3 -std=c++17 标志的行为不同,在 C++14 中我得到了错误的分配,我假设来自垃圾 std::string 的复制构造:

https://godbolt.org/z/H-Xzei

我的猜测是 C++17 版本使底层数组的存活时间比 C++14 版本长,但是我在 cppreference 上发现初始化列表从 C++14 到 C++17 没有相关变化,所以我很困惑。这只是UB是UB,还是语言改变了?

PS我知道如何使用static const auto& results作品来解决这个问题,就像前面提到的那样,这只是一个关于语言极端情况的问题。

0 投票
2 回答
76 浏览

c++ - 初始化列表是否足够静态以允许实例化模板?

我为这个糟糕的问题道歉。我不知道该怎么问。

我认为具有有限数量的迭代足以使该模板化函数实例化,但没有。

有没有办法让它工作?

0 投票
1 回答
69 浏览

c++ - 函数模板如何推断 initializer_list 嵌套的次数?

我有一个函数模板,它接受一个任意嵌套的列表并返回一个数组:

当我将此函数用于某些嵌套std::initializer_list时,如下所示:

我收到无法推断类型 N 的错误

无法推导出模板参数'N'</p>

问题

  • 如何改进我的函数模板以推断列表嵌套的次数?
  • std::initializer_list有比这种情况更好的选择吗?
0 投票
1 回答
50 浏览

c++ - 用单花括号而不是双花括号初始化 std::vector 替换

我有一个类似于以下的代码:

在大多数情况下,这可以作为我自己的 std::vector 替代品使用,但在使用普通 std::vector 列表初始化它时,它并不能很好地工作:

请注意,我使用了双花括号来编译它。那么,我在这里缺少什么?而且,更重要的是,我该怎么做才能像使用普通的 std::vector 一样初始化 mine::myvector?

0 投票
1 回答
102 浏览

c++ - static_caststd::initializer_list::size_type 吐出“无效转换”错误

我正在阅读 BS 的“A Tour of C++”,并且正在重新创建Vector他自始至终使用的课程,至少是前四章。

Vector我在构建构造函数的第二个版本时遇到了问题std::initializer_list。Astatic_cast<int>用于将 转换为我可以初始化size_typeintso 。szVector

但是,由于某种原因,当我尝试在我的个人机器和 OnlineGDB 上编译它时,我收到一个错误:

为什么要尝试将其转换size_type为 a double*?它不应该简单地将其转换为常规int吗?

请参阅我在下面的最小可重现示例中的尝试。

0 投票
1 回答
64 浏览

c++ - 我需要将对象向量或大括号括起来的列表传递给构造函数的选项

我的构造函数最初采用 astd::vector<>但我不知道如何获取一个花括号列表来初始化它。我在更改为std:initializer_list<>. 我找到了两种方法:1)将 initializer_list 作为参数传递给数组构造函数(在下面的代码中注释掉)和 2)使用std::copy算法(如下面的代码所示)。

现在,我需要用 a 创建这个对象,std::vector<>但不知道如何将它转换为 initializer_list。我可以制作第二个采用向量的构造函数,但作为练习,我希望尽可能使用一个构造函数。

有任何想法吗?

0 投票
1 回答
91 浏览

c++ - std::initializer_list 作为模板类中的构造函数参数

我试图在构造函数中使用 std::initializer_list 来接受可变数量的参数。使用非模板类它可以正常工作,但使用模板类它会产生编译错误。谁能指出我正确的方向?我的 g++ 能够使用 C++17。

提前致谢。

0 投票
2 回答
276 浏览

c++ - 这个 C++ 函数如何返回两个值?

请解释此函数如何返回两个值。它采用一个数组并从数组中返回两个数字,其总和等于目标总和。