我有这堂课:
org.gradle.jvmargs = -Xmx5120m
我可以像这样使用它吗?
class foo{
public:
const std::vector<int> get_v() const{
return v_;
}
private:
std::vector<int> v_
};
第一个int main(){
foo f;
some_non_inplace_std_function(f.get_v().cbegin(),f.get_v().cend());
}
是否指向第二个f.get_v()
的相同向量?
答案 0 :(得分:6)
get_v()
按值返回,因此每次调用它时都会获得原始副本。这意味着从get_v()
的不同调用获得的开始和结束迭代器不属于同一序列。
如果你真的打算按值返回,那么你需要复制结果才能使用迭代器对:
auto v = f.get_v();
some_non_inplace_std_function(v.cbegin(), v.cend());
否则,您可以通过引用返回,或直接从foo
返回迭代器或迭代器范围对象。
const std::vector<int>& get_v() const{ ... }
或
struct foo{
std::vector<int>::const_iterator begin() const{ return v_.begin(); }
std::vector<int>::const_iterator end() const{ return v_.end(); }
....
private:
std::vector<int> v_
};
答案 1 :(得分:4)
const std::vector<int> get_v() const{
return v_;
}
您将返回矢量v_
的副本。您可能希望返回对v_
const std::vector<int>& get_v() const{
return v_;
}
答案 2 :(得分:3)
每次打电话get_v
时,都不会制作新副本。要解决此问题,您可以返回一个const引用:
const std::vector<int>& get_v() const { return v_; }
答案 3 :(得分:2)
您应该更改为返回引用,如
const std::vector<int>& get_v() const {
return v_;
}