首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将常量vector<pointers>传递给方法,但更改了指向的值

将常量vector<pointers>传递给方法,但更改了指向的值
EN

Stack Overflow用户
提问于 2010-01-16 10:11:59
回答 4查看 2K关注 0票数 2

我有以下代码(为了简短起见,只显示了相关部分-如果我太简短了,请告诉我):

代码语言:javascript
复制
class my_class
{
    public:
    my_class() {m_i=0;}
    set(int i) {m_i = i;}
    private:
    int m_i;
}

void CallMod()
{
    // create a bunch of my_class* o = new my_class() and store in vector<my_class*> 
    // vObject (left out for brevity)
    Mod(vObject);
    // will vObject contain pointers to objects that have m_i == 2
}

void Mod(vector<my_class*> const & vObject)
{
    BOOST_FOREACH(my_class o, vObject)
    {
        o->set(2);
    }
}

这是否意味着,当vObject为const时,通过调用o->set(2)所做的修改将在Mod返回后保留?这是否表明"const“限定符不允许修改vObject (即向量)上的操作,但允许修改包含的指向my_class的指针?

我的理解对吗?任何重复的问题,回答这个问题-我找不到一个-链接非常感谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-16 10:35:07

向量将是const。您只能从其中获取const_iterators。你不能修改它或它的元素。

容器中的元素将是常量指针。不幸的是,常量指针并不意味着它所指向的元素是常量,只是指针的值不能改变。

如果你有一个vector<my_class>而不是vector<my_class*>,你将不能修改常量向量中的my_class对象(显然,除非你抛出了常量)。

票数 3
EN

Stack Overflow用户

发布于 2010-01-16 10:14:23

你的评估是正确的。您不能修改vObject的成员或对其调用非常数成员函数,但您可以修改成员并为向量中的任何指针调用my_class的非常数成员函数。

票数 3
EN

Stack Overflow用户

发布于 2010-01-16 10:46:59

这意味着您不能在Mod()函数中修改(插入/删除)向量vObject。这也意味着您不能在Mod()函数中修改指向my_class的指针。但您可以修改这些指针所指向的任何内容。修改常量指针和常量指针所指向的元素的规则在这里也适用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2075957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档