包含std ::队列的类的价值限制
Value-initialization of class containing std::queue
这是MCVE:
#include <queue>
struct S
{
std::queue<int> q;
int r;
};
int main()
{
S s{};
}
使用GCC 6.x -std=c++14 -pedantic
我得到警告
<source>:11:9: warning: converting to 'std::queue<int>' from initializer list would use explicit constructor 'std::queue<_Tp, _Sequence>::queue(_Sequence&&) [with _Tp = int; _Sequence = std::deque<int, std::allocator<int> >]'
S s{};
^
<source>:11:9: note: in C++11 and above a default constructor can be explicit ^
在GCC 7.X或Clang中,没有警告。
我的问题是:此代码实际上是否正确;如果是正确的话,试图确切警告我的警告是什么?
实际上,这是根据已发布的标准形式不良的,它用明确的默认构造函数描绘queue
。
S
是一个聚合;S s{};
是汇总初始化,并且不调用S
的默认构造函数。相反,由于未针对q
指定明确的初始化器,因此它是从一个空的初始化器列表中进行了委员会化的,该列表不正确,因为复制列表initialization选择了一个显式构造函数。
gcc 7给了 queue
一个非明确的默认构造函数(无论如何应该是这样),这就是为什么您看不到错误的原因。同样,libc 的 queue
的默认构造函数始终是不明显的。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- boost::进程间消息队列引发错误
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- Android NDK传感器向事件队列报告奇怪的间隔
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 包含std ::队列的类的价值限制
- 将队列处理为包含文件的文件夹.可能存在的问题
- 不能在Netbeans IDE 7.2中包含队列/堆栈C++STL类
- 将包含指向该类型队列的指针的结构推送到队列上时发生运行时崩溃
- 创建包含唯一元素的优先级队列
- 从庸医(队列/堆栈)中包含的圆形数组顶部弹出一个项目
- c++中包含固定大小数组的队列
- 在C++中创建包含不同类型事件的最小优先级队列