我有以下代码(为了简短起见,只显示了相关部分-如果我太简短了,请告诉我):
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的指针?
我的理解对吗?任何重复的问题,回答这个问题-我找不到一个-链接非常感谢。
发布于 2010-01-16 10:35:07
向量将是const。您只能从其中获取const_iterators。你不能修改它或它的元素。
容器中的元素将是常量指针。不幸的是,常量指针并不意味着它所指向的元素是常量,只是指针的值不能改变。
如果你有一个vector<my_class>而不是vector<my_class*>,你将不能修改常量向量中的my_class对象(显然,除非你抛出了常量)。
发布于 2010-01-16 10:14:23
你的评估是正确的。您不能修改vObject的成员或对其调用非常数成员函数,但您可以修改成员并为向量中的任何指针调用my_class的非常数成员函数。
发布于 2010-01-16 10:46:59
这意味着您不能在Mod()函数中修改(插入/删除)向量vObject。这也意味着您不能在Mod()函数中修改指向my_class的指针。但您可以修改这些指针所指向的任何内容。修改常量指针和常量指针所指向的元素的规则在这里也适用。
https://stackoverflow.com/questions/2075957
复制相似问题