问题标签 [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++ - 如何为不支持它的编译器的向量实现 initializer_list 的“替换”?
我使用 Windows 7 和 VS express 2012。问题是编译器(它是原始编译器)不支持向量的 initializer_list。include<initializer_list>
由于给出了错误,因此类 initializer_list 似乎都不被支持。
我想做的是创建一些可以使用与向量的 initializer_list 相同的语法来定义向量的东西。我试图在网上搜索解决方案,但没有找到。最多的问题是关于创建一个 initializer_list 类,如果不是不可能的话,IMO 似乎很乏味。实现不需要使用initializer_list,我唯一想要的是语法是一样的。我也会接受同样简单语法的替代方法(但不是需要创建数组并传递给函数的方法等)。
很抱歉我无法提供任何代码,但我不知道从哪里开始。这似乎是一个热门话题,所以这个问题也应该是相当笼统的。
c++ - T v{} 初始化
我正在阅读 C++11 标准,但不知道是否
是值初始化或默认初始化(自动存储)。它确实很清楚地说:
10 初始化器为空括号集的对象,即 (),应进行值初始化。
然后
11 如果没有为对象指定初始化器,则该对象是默认初始化的;
但我能找到T x{};
的只是:
以 T x(a) 形式发生的初始化;Tx{a}; 以及在 new 表达式 (5.3.4)、static_cast 表达式 (5.2.9)、函数符号类型转换 (5.2.3) 以及基类和成员初始化程序 (12.6.2) 中称为直接初始化。
和
如果初始值设定项是(无括号的)大括号初始化列表,则对象或引用是列表初始化的(8.5.4)。
我不熟悉阅读标准的水平。有人可以指出我正确的方向吗?
c++ - 为什么在此示例中出现错误 C2797?
我有以下代码:
使用 MSVC2013 更新 3 编译,它抱怨C2797 错误。如果我用括号(即x_(x)
)替换花括号,程序编译成功。
为什么会这样?此编译器行为是否符合 C++11?那么 C++14 呢?
编辑:为了更清楚,我不确定x_{x}
上面是否应该根据标准 callX(std::initializer_list)
或者它是否是 call 的有效语法X(const X&)
。据我所知,是后者。我对吗?
c++11 - 返回统一的初始化引用是否有效?
此代码示例是否有效?
似乎:
- clang 3.5 说是
gcc 4.9 说不
/li>
http://coliru.stacked-crooked.com/a/cb6604b81083393f
那么哪个编译器是正确的呢?还是未指定?
它很容易通过以下方式克服 gcc 构建错误:
使用括号代替大括号
/li>通过命名返回值
/li>
选项 1. 破坏统一初始化,选项 2. 添加无用的代码行。
这里已经提出了类似的问题: Why can't I initialize a reference in an initializer list with uniform initialization?
但提到 pr50025 在 gcc 4.9 中已修复。
我知道上面的代码示例毫无用处,但我故意将其过度简化以指出问题所在。在现实生活中,代码问题可以隐藏在一个通用函数中,例如:
c++ - 非聚合上的 C++14 统一初始化
我正在使用 Visual C++ 2013。当类是聚合时,它是零初始化的。当它是非聚合时,它似乎是默认初始化的并且是不确定的。这是为什么?
c++ - std::make_map? 统一初始化
以下作品:
以下没有:
有没有办法在不使用额外变量的情况下初始化用 make_tuple 制作的元组内的地图?
c++ - 为什么是地图m={{1,2},{3,4},{5,0}}; 1号而不是3号?
很奇特:
打印出来
13
c++ - 静态 constexpr 成员的统一初始化
根据: constexpr static data member given undefined reference error static constexpr类成员必须满足两个要求:
- 在类定义中初始化(因为它是 constexpr)
- 在类定义之外定义(因为它是静态的)
如果我将 1. 更改为统一初始化
编译器抱怨声明冲突:
还有关于缺少初始化程序:
删除冲突的 2. 定义按预期结束,但出现链接器错误:
在线代码示例。
对静态 constexpr 类成员使用统一初始化是否可能/合法?
c++ - C++14:为什么我不能对 `void` 使用大括号?
decltype
使用并std::enable_if_t
拥有一个简单有效的 SFINAE 选择是很常见的(至少在我的代码中) 。类似于以下内容:
但是,由于某种原因void{}
无效(至少对于 Clang 和 GCC),所以我不能这样写:我必须用它()
来实例化我的std::enable_if_t
:
这是为什么?