在没有垃圾收集器指针的任何编程语言中我都可以
DrawLine(new Vector(0, 0), new Vector(100, 100));
但是在C ++中,如果DrawLine
不负责删除其参数,我们就不能这样做,因此使用两个向量DrawLine
和(0,0)
调用(100,100)
的最短方法是:
Vector v(0, 0);
Vector w(100, 100);
DrawLine(v, w);
有没有办法将它变成一个声明?特别是如果v
和w
只是该单个函数的参数而没有其他函数使用它,那么它似乎有点冗长。为什么我不能做以下事情:
DrawLine(Vector(0, 0), Vector(100, 100));
答案 0 :(得分:2)
为什么我不能像以下那样做:
DrawLine(Vector(0, 0), Vector(100, 100));
您正在尝试将临时变量作为参数传递。你可以在3个案例中做到这一点。
如果DrawLine
接受const引用传递的参数:
void DrawLine(const Vector& v1, const Vector& v2);
如果可以复制Vector
,并且DrawLine
接受按值传递的参数:
void DrawLine(Vector v1, Vector v2);
如果Vector
可以移动,DrawLine
接受rvalue引用传递的参数:
void DrawLine(Vector&& v1, Vector&& v2);
唯一失败的情况是通过非const引用传递参数,因为临时变量无法绑定到它。
void DrawLine(Vector& v1, Vector& v2);