我想让我的课程在课堂外不可变。
来自:
public:
vector<int>& getValues(){
return values;
}
private:
vector <int>& values;
到此:
public:
vector<int> getValues(){
return values;
}
private:
vector <int>& values;
它能正常工作吗?
答案 0 :(得分:3)
它会起作用,但你最好还是返回一个const引用:
const vector<int> & getValues() const {
return values;
}
此外,在类中存储引用通常(并非总是)是一个错误。你可能想要一个值,或者可能是一个指针。
答案 1 :(得分:3)
是的,但是如果集合很大,它可能会对性能产生负面影响,并且经常调用该函数。返回vector<int> const&
(并声明getValues()
const
)有什么问题?
另外,我想知道你的会员是一个参考。成员应该很少被引用。
答案 2 :(得分:1)
public:
vector<int> getValues(){
return values;
}
private:
vector <int>& values;
不能按原样工作,对矢量实际引用的引用是什么?除非你没有在这里显示所有代码,否则它不会起作用。
只需改为vector<int> values;
。
答案 3 :(得分:1)
是的,你可以这样做,但这不一定是你想要的。
通过这样做,你的getValues方法将复制该向量。这将花费一些时间(取决于矢量的大小)。
如果您确定不经常更改向量,为什么不返回const引用,如下所示:
const vector<int> &getValues() {return values;}
答案 4 :(得分:1)
返回pair
const_iterators
,然后被调用者从底层容器中抽象出来......
e.g。
typedef std::vector<int> vector_type;
public:
typedef std::pair<vector_type::const_iterator, vector_type::const_iterator> range;
range getValues() const
{
return range(values.begin(), values.end());
}
private:
vector_type values;