brace-initialization相关内容
我对花括号列表的不同含义有疑问。 我知道C ++ 03不支持C ++ 11的 initializer_list 。然而,即使没有 -std = c ++ 11 编译器标志,gcc 6.3 会正确初始化 interpolate 这个代码: map interpolate = {{“F”,“a& b& c”},{“H”,“p ^ 2 + w”},{“K”,
..
当我正在阅读C ++ 11标准的第93页$ 5.1.2时,在这种情况下,它表示在这种情况下使用braced-init-list是非常的: auto x = [] { return {1,2}}; //错误:一个braced-init-list不是表达式 我发现了这两个主题,一个来自标准,另一个来自N3681提案。 p> $ 14.8.2.5:一个初始化器列表参数使参数被认为是非推断的
..
以下代码不使用Visual Studio 2013编译。它使用Xcode 6.1(Clang 3.5)编译。 std :: string s1(“one”); std :: string s2(“two”); std :: string s3(“three”); std :: string s4(“four”); class X { typedef std ::
..
假设我有一个变量 auto x ,我想使用大括号初始化初始化为 7 / p> auto x {7}; 除非我知道x是 NOT 一个整数,本身。为什么?是否有一个具体原因,为什么委员会会决定 auto 应该在单个自动值的情况下抓取初始化列表,或者他们希望我们只是实现这些“ t一起使用。 我似乎没有想到一个可能的原因,我想要一个初始化列表存储到自动而不是值 解决方案
..
std :: array,2& ids = {{0,1},{1,2}}; VS2013错误: 错误C2440:'initializing':无法从'int'转换为'std :: pair'没有构造函数可以接受源类型,或者构造函数重载解析是不明确的 我做错了什么? 解决方案 添加另一对大括号
..
假设有一个 std :: array 要初始化。如果使用双括号可以: std :: array x {{0,1}}; 在旧的聚合初始化中使用单个大括号也是可以的,因为大括号缺少的大括号: std :: array
..
这里有两种方法来初始化C ++ 11中的变量: T a {something} T a = {something}; 我测试了这两个在我能想到的情况,我没有注意到一个区别。 此回答表明两者之间存在细微差别: T t = {init}; 或 T t { init}; styles,我发现它的区别是小的,并且在最坏的情况下,只会导致一个有用的编译器消息,关于一
..
GCC的实现破坏了从返回full-expression末尾的函数返回的 std :: initializer_list 数组。这是正确的吗? 这个程序中的两个测试用例都显示在可以使用值之前执行的析构函数: #include #include struct noisydt { 〜noisydt(){std :: c
..
由于C ++ 11,标准库容器和 std :: string 有构造函数采用初始化列表。这个构造函数优先于其他构造函数(甚至,如评论中的@ JohannesSchaub-litb所指出的,甚至忽略其他“最佳匹配”标准)。当将所有括号()形式的构造函数转换为其支撑版本 {}时,会导致一些已知的陷阱 #include #include #i
..
当我运行此代码: struct X { int a; }; struct Y:public X {}; X x = {0}; Y Y = {0}; 我得到: 错误:无法将“{0}”从“'转换为”Y“ 为什么大括号初始化对基类而不是派生类有效? 解决方案您的问题与聚合初始化有关: struct X
..
在C和C ++,可以初始化数组,并使用大括号结构: int类型的[] = {2,3,5,7}; 进入E = {“答案”,42}; 不过,在从2007年谈话,Bjarne的提到这个语法也适用标量。我试了一下: INT I = {7}; 和它的实际工作!什么是落后,允许标量的初始化用大括号什么道理呢? 请注意:我是专门的不的谈论C ++ 11均匀初始化。这是好老C89和C ++ 98。
..