【发布时间】:2014-12-28 01:11:55
【问题描述】:
我有一个返回类向量的函数:
vector<movement> returnMoves(int startx, int starty, int bb[][8], int side){
vector<movement> moves;
movement adding;
moves.push_back(adding); moves.push_back(adding); //example
return moves;
}
而我是从 main 中以这种方式调用函数的:
vector<movement> t1;
t1 = returnMoves(startx, starty, bb, 1);
它可以工作,但是这个过程已经完成了很多次,而且速度很慢,所以我想让它更快,所以我正在考虑通过引用或指针返回: 这是我尝试过的:
vector<movement> & returnMoves(int startx, int starty, int bb[][8], int side){
vector<movement> temp1;
vector<movement>& moves = temp1;
moves.push_back(adding); moves.push_back(adding);
return moves;
}
并以同样的方式调用它:
t1 = returnMoves(startx, starty, bb, 1);
它给了我一个分段错误,我做错了什么?
【问题讨论】:
-
您正在引用未定义的指针。
-
A
std::vector已经只是对包含对象的实际内存的引用,因此您的原始代码只是复制引用(如果未应用 NRVO 直接在调用者需要的地方构造向量它)。这就是 C++11“移动构造函数/移动赋值”的好处。如果您发现原始正确代码的速度变慢,请使用更好的编译器。 -
It works, but this process is being done many many times, and it's slow,你有证据证明它很慢吗?或者你猜它会很慢?另外,如果您进行了测量,您是否测量了程序的优化版本? -
请注意,在您的情况下无法使用 NRVO,因为在初始化期间未创建临时向量。可以用初始化代替赋值吗?
-
最后,如果您没有也无法获得支持 C++11 右值引用的编译器,请使用
swap。
标签: c++ class vector reference return