为什么我不能将具有const
值的结构放入容器中,例如std::vector
?(我理解编译器报告的技术原因,我只是不确定编译器/集合应该这样做)
例如,一些非常简单的事情:
struct sample {
int const a;
};
std::vector<sample> v;
v.push_back( sample{12} );
这给出了关于使用 deleted 的错误(至少在 GCC 中)operator=
。但我不明白为什么它应该使用operator=
. 构造此向量时不需要使用复制运算符。如果它不使用复制构造函数就地新建,这是完全允许的。例如,以下是可以的:
sample a;
new (&a) sample{12};
调用的析构函数sample
也很好。也就是说,这种类型有足够的允许操作来构造一个向量,但我无法这样做。我认为带有右值和移动语义的 C++11 在这里也可能有所帮助,但也许我错了。
标准的哪一部分特别不允许这样做,或者确实是编译器错误(不太可能)?