0

以下代码在 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 没有。

4

1 回答 1

3

对向量的清除操作要求元素类型满足MoveAssignable(见表 100 [C++11: 23.2.3]),而一对const ints 显然不满足。

因此,您的程序是无效的 C++。

不要存储const元素。const像你喜欢的那样暴露矢量本身。

于 2013-10-09T16:07:21.387 回答