问题标签 [uniform-initialization]

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 回答
572 浏览

c++ - 如何将 std::map::operator= 与初始值设定项列表一起使用

我之前问过同样的问题(boost::assign::map_list_of没有得到回答),然后我想也许使用大括号初始化会有所帮助,但事实并非如此。

这完美地工作:

但这不会:

Visual Studio 2013 给出错误error C2593: 'operator =' is ambiguous,可能是operator=(std::initalizer_list)operator=(std::map&&)

是否有可能让第二个版本工作?例如,对于m成员变量的情况。

0 投票
1 回答
198 浏览

c++ - 防止隐式转换但允许列表初始化?

假设我有一个FunctionWrapper这样定义的类:

我想防止从std::function<void()>to进行隐式转换FunctionWrapper,但允许FunctionWrapper使用大括号初始化语法构造 a (即,使用带有单个参数的列表初始化)。换句话说,我想要这样:

有没有办法做到这一点?我在上面定义类的方式不是这样:这允许隐式转换,所以 (1) 编译。

如果我添加explicit到构造函数:

它也无济于事,因为这“太过分”并且不允许(2)和(1)。

有没有办法实现“中间立场”并让(2)编译而(1)产生错误?

0 投票
1 回答
336 浏览

qt - std::initializer_list作为构造函数参数和统一的初始化语法

一段时间以来,我使用 C++11 统一初始化语法{}来初始化我的所有变量。

现在我想QVector<int> 用特定的 size初始化 a ,所以我需要调用QVector(int size)构造函数(doc here)。

但是,QVector也有以下构造函数: QVector(std::initializer_list<T> args)

因此,当我像这样初始化我的变量时:QVector<int> foo{ 100 };,它不会用 100 个元素的大小初始化我的 QVector ,而是调用另一个构造函数,该构造函数构造一个 QVector值为100 的元素

如何调用QVector(int size)构造函数但仍使用统一初始化语法

0 投票
0 回答
35 浏览

c++ - 具有统一初始化的英特尔 C++ 编译器问题

我有以下代码尝试在构造函数中使用 std::array 的统一初始化:

此代码使用 g++ 和 clang++ 编译。但是,英特尔 icpc (17.0.0 20160721) 失败并显示:

我的问题是,“这是英特尔 icpc 中的错误,还是 g++ 和 clang++ 过于宽松?”

如果我在构造函数中将 'arr_{arr}' 更改为 'arr_(arr)',英特尔 icpc 会编译代码。

0 投票
3 回答
433 浏览

c++ - int* 的统一初始化:如何强制?

以下代码不能使用clang++ 3.8.0g++ 6.3.0编译(编译器标志为-std=c++11 -Wall -Wextra -Werror -pedantic-errors):

这是一种强制int*{}编译器在此处以正确方式解释的方法(typedefing ofint*是其中一种方式)?

0 投票
1 回答
1841 浏览

c++ - C++ 标准是否保证统一初始化是异常安全的?

vc++clang输出:

虽然gcc输出:

这似乎是 GCC 的一个严重错误。

有关参考,请参阅GCC 错误 66139Andrzej Krzemieński 的“GCC 中的严重错误”

我只是好奇:

C++ 标准是否保证统一初始化是异常安全的?

0 投票
1 回答
83 浏览

c++ - 使用统一初始化时未调用 std::string(count, ch)

我刚刚被这种看似无辜的尝试抓住了,该尝试使用统一的初始化语法调用采用大小和字符值的std::string构造函数:

我认为这会创建一个长度为 10 的字符串,初始化为\0.

虽然它实际上调用了构造函数,该构造函数接受一个初始化列表,从而创建了一个长度为 2的字符串,初始化为{'\n', '\0'}!

请参阅Coliru 的演示

使用统一初始化时有没有办法避免这个陷阱?还是我只需要小心?

注意:之前也有人问过 类似的问题,但没有给出如何避免这种陷阱的答案。

0 投票
1 回答
79 浏览

c++ - 缩小转换差异

使用 g++ 和 clang 都可以编译

但是编译不行

这个看似奇怪的选择背后的理由是什么?

如果我们同时考虑最后一个值的类型unsigned,并且double不能安全地转换为 an int,并且如果我们同时考虑特定的文字值3u并且3.0可以安全地转换。

那为什么要区分呢?

正式规范说,如果可以表示值,则允许从整数或枚举转换为不同的它,甚至允许从丢失数据的文字进行转换(例如double转换为float)。有趣的是,这会导致:

0 投票
3 回答
341 浏览

c++ - 结构上的 C++14 统一初始化

我有以下相当简单的代码:

我想知道为什么上面的代码不起作用,下面的代码起作用:

Visual Studio 15 2017 给了我这两个错误:

1:期望一个';'

2: 错误 C2064: 术语不计算为带 1 个参数的函数

0 投票
1 回答
375 浏览

c++ - 自定义大括号初始化器

假设我有这个结构:

据我所知,这不是一个聚合,因为我有一些构造函数。

我想要实现的是以自定义方式使用花括号初始化程序,这意味着使用如下代码:

它隐式调用正确的构造函数(在这种情况下是第一个)。

这有可能吗?