2016-04-30 47 views
0

在没有使用的垃圾收集器指针任何编程语言,我可以做创建临时对象为堆栈上的参数

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); 

有没有一种方法,使之成为一个单独的语句呢?特别是如果vw只是该单个函数的参数,并且没有其他函数使用它,那么它看起来有点冗长。为什么我就不能这样做:

DrawLine(Vector(0, 0), Vector(100, 100)); 
+1

“为什么我就不能这样做:'的DrawLine(矢量(0,0),向量(100,100));'” 因为'DrawLine'是愚蠢到要求左值或编译器被打破? – MikeCAT

+0

该行[do works](https://ideone.com/isPOZG)。 *你不能这样做的另一个情况是它在你的编码约定中被禁止。 – MikeCAT

+0

@MikeCAT,谢谢!你是对的,它编译! – Carucel

回答

2

为什么我就不能这样做:

DrawLine(Vector(0, 0), Vector(100, 100)); 

你试图通过临时变量作为参数。你可以做3件事。

  1. 如果DrawLine采用由const引用传递的参数:

    void DrawLine(const Vector& v1, const Vector& v2);

  2. 如果Vector可能被复制,并DrawLine需要传递的参数由值:

    void DrawLine(Vector v1, Vector v2);

  3. 如果Vector可以移动,并DrawLine采用由右值引用传递参数:

    void DrawLine(Vector&& v1, Vector&& v2);

唯一的故障情况下,通过非const引用传递参数,因为临时变量不能被绑定到它。

void DrawLine(Vector& v1, Vector& v2); 
相关问题