std :: vector <std :: pair <const int,=“”const =“”int =“”>&gt; :: clear()VS 2010 no-compile </std :: pair <const>

时间:2013-10-09 15:58:25

标签: c++ visual-studio-2010

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

1 个答案:

答案 0 :(得分:3)

对向量的清除操作要求元素类型满足MoveAssignable(参见[C++11: 23.2.3]中的表100),其中一对const int显然不会。{ / p>

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

不要存储const个元素。如果您愿意,可以将矢量本身公开为const