为什么我被允许为包含常量指针的向量分配新地址?

时间:2010-08-18 21:12:53

标签: c++ pointers vector constants

我认为标题清楚地解释了我的问题....考虑以下片段:

class Critter {
    int m_Age;
};

int main()
{
    vector<Critter* const> critters;
    for(int i = 0; i < 10; ++i)
        critters.push_back(new Critter());

    critters[2] = new Critter();

    return 0;
}

critters[2] = new Critter();不应该是非法的吗?

谢谢

2 个答案:

答案 0 :(得分:5)

实际上这一行应该是非法的(即使是#include <vector>using std::vector;):

vector<Critter* const> critters;

因为要求在容器中使用的类型是可分配的,而const的任何内容都不是。

答案 1 :(得分:0)

抱歉,我没有发布整个代码,因为缺少的只是包含和使用...无论如何这里是整个代码:

#include <iostream>
#include <vector>

using namespace std;

class Critter {
    int m_Age;
};

int main()
{
    vector<Critter* const> critters;
    for(int i = 0; i < 10; ++i)
        critters.push_back(new Critter());

    critters[2] = new Critter();

    return 0;
}

这个代码实际上编译得很好,即使在VS 2010中没有警告...... 再次感谢...