问题标签 [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++ - 是否必须让默认构造函数在 C++ 中使用统一初始化
在下面给出的代码中,我收到一条错误消息“没有默认构造函数”。这就是我不能使用统一初始化程序的原因。
当我创建一个默认构造函数时,我得到了一个关于大括号的错误。
请强调有关此程序和统一初始化程序的问题。
我正在使用 VS 2012 和 C++
c++11 - 使用统一初始化不危险吗?
几天前我发现了统一初始化,我到处都看到每个人都应该尽可能地使用它。
但是,我不禁认为这种新语法比它的价值更麻烦......
第一个例子
假设我编写了一个库,其中有一个这样的结构:
用户可以使用聚合初始化编写类似这样的内容:
现在,假设我更新了我的库,并且结构现在看起来像这样:
在 C++11 之前,用户代码会停止编译,这将迫使用户重写他的代码并使用构造函数。但是现在,代码将编译并被解释为统一初始化:
在用户不知道的情况下,更新他的库会使他的代码做一些非常不同的事情!
第二个例子
现在,让我们说我的图书馆中有这样的课程:
用户可以像这样使用它:
或者,使用统一初始化,如下所示:
再说一次,让我们说我更新了我的图书馆。类现在看起来像这样:
如果使用经典构造函数不会有问题:
但是如果调用统一初始化,代码解释将会改变:
基于这些示例,在我看来,用户使用统一初始化是极其危险的,因为当将内容添加到使用的库时,代码解释可能会发生变化,而根本没有任何警告。
更糟糕的是,统一初始化的引入使聚合初始化变得危险。
我错过了什么吗?是否存在使用统一初始化既安全又有用的情况?
c++ - 使用统一初始化语法使用初始化列表进行类内成员初始化?
我正在尝试使用 MSVC2013 编译以下内容:
编译器给我以下错误:SomeClass::SomeStruct::SomeStruct: no overloaded function takes 3 arguments.
如果我将代码更改为:
该程序编译并运行良好。这是编译器的问题,还是我不懂语法?从我一直在阅读的内容来看,第一个版本应该可以编译。
c++ - 迭代器的统一初始化
我对 C++11 很陌生,迭代器和统一初始化存在问题,我不明白。
考虑以下示例,该示例无法编译:
在第 6 行中,使用统一初始化来初始化向量。在第 7 行中,我尝试对迭代器做同样的事情。这没用。将第 7 行更改为auto iter = t.begin()
可以。我知道我可以为此简单地使用“基于范围”,但问题是:为什么统一初始化不适用于迭代器,但适用于基本类型,例如int i{0};
?
c++ - `Object obj(args...)` 和 `Object obj{args...}` 有什么区别?
Scott Meyers的《 Effective C++11》草稿指出:
创建对象时区分 () 和 {}
Object obj(args...)
和有什么区别Object obj{args...}
?以及斯科特为什么这么说。
更新:
问题如何使用 C++11 统一初始化语法?问如何,而这个问题问为什么。
更新2:
我发现以下链接很有帮助,并且完全回答了这个问题:
c++ - 使用已删除的复制构造函数初始化 const 引用成员
这段代码,其中有一个const A& a
成员B
,其中A
有一个已删除的复制构造函数,在 GCC 4.8.1 中无法编译,但在 clang 3.4 中可以正常工作:
哪一个编译器是正确的?
GCC 中的错误是:
ideone:http: //ideone.com/x1CVwx
c++ - 原子结构的统一初始化?
编辑:两者都在 g++ 中工作,在铿锵声中都不工作{{1, 2}}
。({1, 2})
铿锵有没有解决方法?
c++ - Eclipse 格式错误的 C++11 统一初始化
我正在尝试在 Eclipse CDT Luna 4.4 中使用 C++11 统一初始化,以便我可以更轻松地发现发生缩小的位置。我有两个问题。首先是代码样式格式化程序有时将大括号初始化视为一段代码(示例#2)。第二个是,没有赋值运算符的统一初始化给我一个编译器错误和一个警告(示例#4)。
我的项目设置为使用“ISO C++11 (-std=c++0x)”语言标准方言。使用 gcc 版本 4.8.1 (GCC)。
以下是一些格式示例,每个示例都包含之前和之后的代码:
示例 #1 -初始化- 格式正常,没有编译器消息:
示例 #2 -赋值- 'Braces' 选项卡上的 'Blocks' 格式化程序选项控制 'if' 语句样式,当 'Blocks' 设置为 'Next line' 时,它也会影响下面的赋值行为。我希望继续为我的“if”语句使用“下一行”大括号样式(Allman),而不是将其设置为“同一行”(K&R),这也会停止此处观察到的新行行为:
示例 #3 -没有赋值运算符的初始化- 格式很好,没有编译器消息:
示例 #4 -没有赋值运算符的赋值- 格式很好,但是会给出expected ';' before '{' token
错误和statement has no effect [-Wunused-value]
编译器警告:
似乎没有中间立场。在示例 #1 和 #3 中使用统一初始化进行初始化都可以正常工作,但是在 #2 和 #4 中进行赋值时,前者会出现格式错误,而后者会产生编译器消息。
我是 C++ 新手,任何人有任何建议或在我的逻辑中看到房间里的大象吗?我以某种方式得到的印象是,不应将统一初始化用于分配,因为我没有看到任何示例,但令我困惑的是,即使在 #2 中分配会产生格式错误,编译narrowing conversion ... [-Wnarrowing]
器在输入时确实会给出正确的编译器警告一个浮点数。
任何帮助表示赞赏,谢谢!
c++ - C++11 中的统一初始化语法
关于 C++11 中“统一初始化语法”的问题。
使用 C++11 中的下一个语法初始化结构是否合法(查看第 #128-137 行)?还是 POD 仍然是实际的?
MSVC 2013 编译器的问题。此示例编译成功,但因错误的函数调用异常而崩溃。这告诉我 std::function 对象未正确初始化。
顺便说一句,ICC 13.0 无法编译示例中的代码。
example.cpp(130): error #2084: designator may not specified an non-POD (Plain Old Data) 子对象
它是编译器的缺陷吗?或者编译器一切正常,但这种方法不符合 C++11?
这是一个简短的例子:
c++11 - 统一初始化语法还是类型转换?
将括号更改为花括号似乎会在我的程序中产生完全相同的行为,即使在语义上它们似乎是完全不同的野兽。是否有理由(内存使用、性能等)更喜欢一个?
[编辑]
我的实际代码与上面的示例有点不同,也许这解释了缩小问题: