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

c++ - 使用 {} 报告未使用变量的统一初始化

使用 g++ 4.7.0 ( ) 编译此代码-Wall -Wextra -Werror -Wconversion -std=c++11

...导致以下错误:

我可以通过将bar初始化更改为以下任何一项来消除错误:

更改bar初始化后,输出始终为:

为什么原始bar初始化报告一个未使用的变量?

0 投票
3 回答
5921 浏览

c++ - 为什么我不能用统一初始化初始化初始化列表中的引用?

也就是说,为什么会这样:

给我一个 GCC 4.7 的编译器错误:

?

要修复错误,我必须s{s}s(s). 这不会破坏统一初始化的统一性吗?

编辑:我尝试了 clang,并且 clang 接受了它,所以也许这是一个 GCC 错误?

0 投票
3 回答
391 浏览

c++ - 动态对象的统一初始化

统一初始化是否不适用于动态对象,或者这是 g++ 4.6.1 的缺点?


它适用于 g++ 4.7.1,但如果从另一个类继承,则这两行都main无法编译:foo

再次,我的编译器的缺点?或者统一初始化不能很好地与继承一起使用?

0 投票
4 回答
1950 浏览

c++ - 为什么这个使用统一初始化的代码片段使用 g++4.6 而不是 g++4.7 编译?

请注意,derived使用 C++11 统一初始化语法来调用基类构造函数。

g++4.6 编译这个,但是 g++4.7 没有:

这是怎么回事?

更新 1:它也可以在没有警告的情况下使用 clang++-3.1进行编译
更新 2:看起来肯定是一个编译器错误。它显然已在 GCC 4.7.3 中修复。

0 投票
1 回答
1541 浏览

c++ - 用平凡的ctor对派生类进行统一初始化

我试图用 c++11 统一初始化来解决一些极端情况,但我不知道为什么会这样:

标记为2的行失败,并带有 和 的“没有匹配的 Derived 初始化构造函数”消息。clang 3.1g++ 4.7

我不明白为什么在 Derived 的情况下,它试图调用构造函数而不执行(我不知道如何调用它,也许是聚合初始化?)就像第 1 行的情况一样)。

以下推理中的某些内容是错误的?:

A)微不足道的保证它可以被静态初始化

B)要静态初始化,不需要在运行时执行任何代码,因此不需要构造函数调用 A+B=>为什么它试图调用它知道微不足道的类型的构造函数?

我很困惑......

0 投票
1 回答
4623 浏览

c++ - 使用 C++11 统一初始化时出现“结构初始化程序中的多余元素”错误

我对以下编译器错误感到惊讶:

错误是(带有clang):

GCC 给出了类似的错误。

我希望表达式t_{t}尝试t_t. 由于S有一个隐式生成的复制构造函数,我不认为这是一个问题。

有人可以解释这里发生了什么吗?

0 投票
1 回答
494 浏览

c++ - 使用统一初始化构造对象的简单程序编译失败

考虑以下程序:

当使用 GCC 4.7.2、GCC 4.8.0 和 Clang 3.2 编译时,该程序执行以下操作 (*):

  1. 构造一个临时的类型X传递值01构造函数,然后;
  2. X从那个临时的移动构造。

相反,使用 ICC 13.0.1,它不会编译。

问题1:谁是对的?

(*)实际上,临时的创建和对移动构造函数的调用被省略了,但是使用-fno-elide-constructors选项编译并向构造函数添加一些打印输出表明这是正在发生的事情。


现在考虑以下,上述程序的轻微变化,其中统一初始化用于直接初始化x

我不希望在这里使用大括号而不是括号来改变任何东西,但它会以某种方式改变:这个程序不能在我测试过的任何编译器上编译(Clang 3.2,GCC 4.7.2,GCC 4.8。 0 测试版和 ICC 13.0.1)。

问题2:为什么?

0 投票
1 回答
151 浏览

c++11 - 无法让移动构造函数运行

C++11

我在使用移动构造函数时遇到问题。我有一个简单的容器类,叫做Number,它唯一的数据成员是一个整数。我有以下代码:

这输出:

请注意,D 部分没有输出。A 和 B 部分的输出是我所期望的,但其他部分的输出不是。

我预计 C 和 D 部分会这样:

对 C 部分的期望:

我希望通过使用. Number{n1}_ 然后我期望通过使用临时对象调用移动构造函数来构造。Number n3{Number{n1}}NumberNumbern1Number n3

对 D 部分的期望:

由于这类似于 C 部分,除了使用括号而不是花括号外,我希望这部分的行为和输出方式与我期望 C 部分相同。

问题:

为什么实际输出与我的预期不同,获得所需输出的正确方法是什么?

注意:如果您想在 Visual Studio 中编译它,您需要Visual C++ Compiler November 2012 CTP或更高版本的 Visual Studio 2012 以支持统一初始化语法。

0 投票
1 回答
1482 浏览

c++ - 对整数向量的向量进行统一初始化

C++11

程序初始化 s 中的 a vector, named myVecint vector然后使用循环打印出每个 innervector的元素。但是当我尝试查看使用额外的花括号时会发生什么时,我得到了意想不到的结果。以下内容也在此 LiveWorkSpace上,以便在编译器之间轻松切换。g++ 4.8.0最多只能编译myVec[5]. clang++ 3.2编译一切:

实际g++ 4.8.0输出:

分析:

myVec[0]: {1, 2}:

得到预期的输出。

myVec[1]: {}:

得到预期的输出。

myVec[2]: {{}}:

这是 的向量int 0。内大括号初始化一个intto 0

myVec[3]: { {}, {} }:

int两个内大括号将each初始化为0

myVec[4]: { {}, {}, {} }:

int三个内大括号将each初始化为0

myVec[5]: {{{}}}:

我想再添加一组花括号,myVec[2]看看在出现编译器错误之前添加花括号能走多远。我不明白为什么会编译以及为什么它的元素打印为0.

例如,int j = {}初始化j0. vector<vector<int>> v = { {{}} }将最内层初始化{}int 0,使其等价于vector<vector<int>> v = { {0} }。那么,vector<vector<int>> u = { {{{}}} }它是什么以及为什么要编译?

假设的myVec[6]: { {{}}, {{}} }:

按照与上面相同的模式,我想制作一个包含两组双花括号的向量。但这不能编译,我不明白为什么这会破坏给我多个零的模式。

假设的myVec[7]: {{{{}}}}:

我想再添加一组花括号,myVec[5]看看在出现编译器错误之前添加花括号能走多远。我不明白为什么这会破坏模式并且无法编译。

假设的myVec[8]: { {{{}}}, {{{}}} }:

我想扩展myVec[7]以制作带有两组三重括号的向量。我不明白为什么这也不能编译。

如果一切都可以myVec[5]编译,为什么其余的不?

0 投票
3 回答
500 浏览

c++ - 尝试在声明中仅使用类名构造临时对象

C++

此类的对象cout在构造和销毁时的消息。我尝试使用仅声明类名的声明来构造一个临时对象,但它给出了意外的输出。

在 #1 中,我使用括号实例化了一个临时的无名对象。

在 #2 中,我使用统一初始化实例化了一个临时无名对象。

我不知道#3 是否会编译。我只认为如果要编译#3,它将意味着构建一个临时无名对象。它确实可以编译,但从 #3 下控制台输出的空白可以看出,没有构造任何对象。这里发生了什么?

控制台输出:

注意:这是在 VC11 中使用 2012 年 11 月 CTP 编译的。它不能在g++ 4.8.0或 clang 3.2 中编译,分别给出error: declaration does not declare anything [-fpermissive]fatal error: 'iostream' file not found