我有一堂这样的课:
class Foo
{
public:
Foo()
{
for(int i = 0; i < 10; ++i)
v.push_back(i);
};
const vector<double>& V() const {return v;};
protected:
vector<double>& V() {return v;};
private:
vector<double> v;
};
然后是这样的一段代码:
Foo foo;
for(int i = 0; i < (int) foo.V().size(); ++i)
cout << foo.V().at(i) << endl;
但是,后者会引发编译错误,指出V()
call 是一个受保护的方法,而我只是尝试读取它,而不是修改它。
我尝试了以下方法(但没有成功)。
Foo foo;
const vector<double>& test = foo.V();
for(int i = 0; i < (int) test.size(); ++i)
cout << test.at(i) << endl;
非常感谢您的帮助。
=====
谢谢大家的解释和解决方案!非常感谢!
返回值不可能重载。当对象是非 const 时,将使用非 const 方法。可以通过以下方式指导编译器:
const vector<double>& test = const_cast<Foo const&>(foo).V();
或者可能更好的解决方案是让常量方法具有不同的名称(例如:ConstV
)。或者您可以只添加这个新方法并将当前方法保留在那里。 C++0x 标准中使用了这种方法。例如常量方法cbegin()
and cend()
已添加到标准容器中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)