以下代码无法在Visual Studio 2010中编译。为什么?
#include <vector>
#include <tuple>
int main() {
std::vector<std::pair<const int, const int> > myVec;
for(int i=0; i<88; ++i)
myVec.push_back(std::make_pair<const int, const int>(1,i));
myVec.clear();
return 0;
}
如果我省略了清除向量的行,它就可以正常工作。我想要一个空的myVec。也无法抹去。 pop_back工作。 std :: swap没有。
答案 0 :(得分:3)
对向量的清除操作要求元素类型满足MoveAssignable
(参见[C++11: 23.2.3]
中的表100),其中一对const
int
显然不会。{ / p>
因此,您的程序是无效的C ++。
不要存储const
个元素。如果您愿意,可以将矢量本身公开为const
。