问题标签 [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++ - 使用 {} 报告未使用变量的统一初始化
使用 g++ 4.7.0 ( ) 编译此代码-Wall -Wextra -Werror -Wconversion -std=c++11
:
...导致以下错误:
我可以通过将bar
初始化更改为以下任何一项来消除错误:
更改bar
初始化后,输出始终为:
为什么原始bar
初始化报告一个未使用的变量?
c++ - 为什么我不能用统一初始化初始化初始化列表中的引用?
也就是说,为什么会这样:
给我一个 GCC 4.7 的编译器错误:
?
要修复错误,我必须s{s}
将s(s)
. 这不会破坏统一初始化的统一性吗?
编辑:我尝试了 clang,并且 clang 接受了它,所以也许这是一个 GCC 错误?
c++ - 动态对象的统一初始化
统一初始化是否不适用于动态对象,或者这是 g++ 4.6.1 的缺点?
它适用于 g++ 4.7.1,但如果从另一个类继承,则这两行都main
无法编译:foo
再次,我的编译器的缺点?或者统一初始化不能很好地与继承一起使用?
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 中修复。
c++ - 用平凡的ctor对派生类进行统一初始化
我试图用 c++11 统一初始化来解决一些极端情况,但我不知道为什么会这样:
标记为2的行失败,并带有 和 的“没有匹配的 Derived 初始化构造函数”消息。clang 3.1
g++ 4.7
我不明白为什么在 Derived 的情况下,它试图调用构造函数而不执行(我不知道如何调用它,也许是聚合初始化?)就像第 1 行的情况一样)。
以下推理中的某些内容是错误的?:
A)微不足道的保证它可以被静态初始化
B)要静态初始化,不需要在运行时执行任何代码,因此不需要构造函数调用
A+B
=>为什么它试图调用它知道微不足道的类型的构造函数?
我很困惑......
c++ - 使用 C++11 统一初始化时出现“结构初始化程序中的多余元素”错误
我对以下编译器错误感到惊讶:
错误是(带有clang):
GCC 给出了类似的错误。
我希望表达式t_{t}
尝试t_
从t
. 由于S
有一个隐式生成的复制构造函数,我不认为这是一个问题。
有人可以解释这里发生了什么吗?
c++ - 使用统一初始化构造对象的简单程序编译失败
考虑以下程序:
当使用 GCC 4.7.2、GCC 4.8.0 和 Clang 3.2 编译时,该程序执行以下操作 (*):
- 构造一个临时的类型
X
传递值0
和1
构造函数,然后; 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:为什么?
c++11 - 无法让移动构造函数运行
C++11
我在使用移动构造函数时遇到问题。我有一个简单的容器类,叫做Number
,它唯一的数据成员是一个整数。我有以下代码:
和
和
这输出:
请注意,D 部分没有输出。A 和 B 部分的输出是我所期望的,但其他部分的输出不是。
我预计 C 和 D 部分会这样:
对 C 部分的期望:
我希望通过使用. Number{n1}
_ 然后我期望通过使用临时对象调用移动构造函数来构造。Number n3{Number{n1}}
Number
Number
n1
Number n3
对 D 部分的期望:
由于这类似于 C 部分,除了使用括号而不是花括号外,我希望这部分的行为和输出方式与我期望 C 部分相同。
问题:
为什么实际输出与我的预期不同,获得所需输出的正确方法是什么?
注意:如果您想在 Visual Studio 中编译它,您需要Visual C++ Compiler November 2012 CTP或更高版本的 Visual Studio 2012 以支持统一初始化语法。
c++ - 对整数向量的向量进行统一初始化
C++11
程序初始化 s 中的 a vector
, named myVec
,int
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
。内大括号初始化一个int
to 0
。
myVec[3]
: { {}, {} }
:
int
两个内大括号将each初始化为0
。
myVec[4]
: { {}, {}, {} }
:
int
三个内大括号将each初始化为0
。
myVec[5]
: {{{}}}
:
我想再添加一组花括号,myVec[2]
看看在出现编译器错误之前添加花括号能走多远。我不明白为什么会编译以及为什么它的元素打印为0
.
例如,int j = {}
初始化j
为0
. 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]
编译,为什么其余的不?
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
。