2016-04-30 59 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);