问题标签 [list-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 回答
6489 浏览

c++ - 无法在初始化中转换类型

我想我错过了一些东西,我不知道到底是什么。让我们看一下代码片段。

用法如下所示:

一切都如预期。但是当我想将用户定义的类型作为 Foo 的 T 参数时,会发生一些错误。考虑:

和用法:

这两个指令都给出(gcc 4.8.1):

我可以像这样创建 Boo 对象:

那么,你能告诉我问题出在哪里吗?

可能的解决方案:

以下两个说明都按预期工作:

对我来说,没关系,我看不出有什么理由不向类添加两个构造函数,但是如果类型不是我的呢?我应该用构造函数编写简单的包装器吗?

谢谢,阿图尔

0 投票
1 回答
302 浏览

c++ - c++11列表初始化的不同行为

请考虑以下代码:

现在,我想使用列表初始化来初始化 A 的数组。g++ (4.9.1) 可以成功构建以下代码:

但是,以下代码失败了:

错误消息是,

也就是说,列表初始化器尝试调用移动构造函数来初始化类内部的数组。然而,该代码是由 clang v3.5 成功构建的,没有任何警告。因此,我想知道 C++11(或更高版本)针对列表初始化指定了哪些规则。提前致谢。

0 投票
2 回答
331 浏览

c++ - c++11中结构数组的大括号初始化

这是我的代码:

当我使用gcc 4.8.2(在 Ubuntu 14.04 上)使用-std=gnu++11选项编译它时,我收到以下错误:

为什么会引发内部编译器错误?它是编译器错误吗?

0 投票
1 回答
278 浏览

c++ - 如何使用列表初始化对聚合类型进行值初始化

如何使用列表初始化语法对 C++14 中的聚合类型进行值初始化?

这被视为聚合初始化,它会为未初始化的Aggregate_t.

这可能吗?

编辑:例子

使用 g++-4.9.2 编译:

0 投票
2 回答
299 浏览

c++ - 如何在 C++ 子类的构造函数中初始化超类的 const 成员变量?

我有以下情况,我声明了一个超类const的成员,现在我想在其子类之一的构造函数中使用列表初始化器对其进行初始化

我不确定这是否可能,如果我采用上面显示的直接方法,编译器会抱怨以下消息:

这个答案解释了为什么不能在子类构造函数的列表初始化器中初始化超类的成员变量。我想知道这种情况的最佳做法是什么?

0 投票
0 回答
148 浏览

c++ - C++14:为什么我不能对 `void` 使用大括号?

decltype使用并std::enable_if_t拥有一个简单有效的 SFINAE 选择是很常见的(至少在我的代码中) 。类似于以下内容:

但是,由于某种原因void{}无效(至少对于 Clang 和 GCC),所以我不能这样写:我必须用它()来实例化我的std::enable_if_t

这是为什么?

0 投票
1 回答
48 浏览

c++ - 通过函数调用进行大括号或等号初始化

尽管我认为这不是一个好习惯,但我使用的编译器(GNU 和 clang)似乎允许以下内容

即通过调用完全无关的函数来进行大括号或等号初始化。

这是正确的并且是标准允许的吗?执行 最终引入的附带影响又如何f()呢?

0 投票
2 回答
517 浏览

c++ - 转发就地构造和列表初始化

通过转发就地构造,我的意思是std::allocator::construct和各种 emplace 方法,例如std::vector::emplace_back。我只是发现 C++ 中的转发就地构造没有(不能?)利用列表初始化语法。结果,似乎永远无法就地构建聚合。我只想确定转发的就地构造是否不支持列表初始化,因此不支持聚合类型。这是因为语言的限制吗?有人可以提供有关此问题的标准参考吗?下面是一个插图:

虽然我们可以直接进行就地施工,例如

我们不能像

0 投票
1 回答
1813 浏览

c++ - 启用默认初始化列表构造函数

我相信现代 C++ 初始化器列表对于初始化对象非常有用,以至于不再需要定义自己的构造函数:

但是,当我的类从另一个类继承时,这不起作用:

我尝试添加point() = default;到我的点课程,但这也不起作用。我怎样才能仍然用初始化列表初始化点?

0 投票
2 回答
4496 浏览

c++ - 如何构造具有唯一指针的向量

我尝试用 unique_ptr 构造一个向量。但是我没有找到直接的方法。以下代码无法编译。错误是:调用 'std::__1::unique_ptr >' 的隐式删除的复制构造函数: