问题标签 [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.
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
成员变量的情况。
c++ - 防止隐式转换但允许列表初始化?
假设我有一个FunctionWrapper
这样定义的类:
我想防止从std::function<void()>
to进行隐式转换FunctionWrapper
,但允许FunctionWrapper
使用大括号初始化语法构造 a (即,使用带有单个参数的列表初始化)。换句话说,我想要这样:
有没有办法做到这一点?我在上面定义类的方式不是这样:这允许隐式转换,所以 (1) 编译。
如果我添加explicit
到构造函数:
它也无济于事,因为这“太过分”并且不允许(2)和(1)。
有没有办法实现“中间立场”并让(2)编译而(1)产生错误?
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)
构造函数但仍使用统一初始化语法?
c++ - 具有统一初始化的英特尔 C++ 编译器问题
我有以下代码尝试在构造函数中使用 std::array 的统一初始化:
此代码使用 g++ 和 clang++ 编译。但是,英特尔 icpc (17.0.0 20160721) 失败并显示:
我的问题是,“这是英特尔 icpc 中的错误,还是 g++ 和 clang++ 过于宽松?”
如果我在构造函数中将 'arr_{arr}' 更改为 'arr_(arr)',英特尔 icpc 会编译代码。
c++ - int* 的统一初始化:如何强制?
以下代码不能使用clang++ 3.8.0和g++ 6.3.0编译(编译器标志为-std=c++11 -Wall -Wextra -Werror -pedantic-errors
):
这是一种强制int*{}
编译器在此处以正确方式解释的方法(typedef
ing ofint*
是其中一种方式)?
c++ - C++ 标准是否保证统一初始化是异常安全的?
vc++
和clang
输出:
虽然gcc
输出:
这似乎是 GCC 的一个严重错误。
有关参考,请参阅GCC 错误 66139和Andrzej Krzemieński 的“GCC 中的严重错误”。
我只是好奇:
C++ 标准是否保证统一初始化是异常安全的?
c++ - 使用统一初始化时未调用 std::string(count, ch)
我刚刚被这种看似无辜的尝试抓住了,该尝试使用统一的初始化语法调用采用大小和字符值的std::string
构造函数:
我认为这会创建一个长度为 10 的字符串,初始化为\0
.
虽然它实际上调用了构造函数,该构造函数接受一个初始化列表,从而创建了一个长度为 2的字符串,初始化为{'\n', '\0'}
!
请参阅Coliru 的演示。
使用统一初始化时有没有办法避免这个陷阱?还是我只需要小心?
注意:之前也有人问过 类似的问题,但没有给出如何避免这种陷阱的答案。
c++ - 缩小转换差异
使用 g++ 和 clang 都可以编译
但是编译不行
这个看似奇怪的选择背后的理由是什么?
如果我们同时考虑最后一个值的类型unsigned
,并且double
不能安全地转换为 an int
,并且如果我们同时考虑特定的文字值,3u
并且3.0
可以安全地转换。
那为什么要区分呢?
正式规范说,如果可以表示值,则允许从整数或枚举转换为不同的它,甚至允许从丢失数据的文字进行转换(例如double
转换为float
)。有趣的是,这会导致:
c++ - 结构上的 C++14 统一初始化
我有以下相当简单的代码:
我想知道为什么上面的代码不起作用,下面的代码起作用:
Visual Studio 15 2017 给了我这两个错误:
1:期望一个';'
2: 错误 C2064: 术语不计算为带 1 个参数的函数
c++ - 自定义大括号初始化器
假设我有这个结构:
据我所知,这不是一个聚合,因为我有一些构造函数。
我想要实现的是以自定义方式使用花括号初始化程序,这意味着使用如下代码:
它隐式调用正确的构造函数(在这种情况下是第一个)。
这有可能吗?