比方說,我有一個類:使用大括號
class Aggregate {
public:
int x;
int y;
};
我知道如何使用大括號來初始化的對象:
Aggregate a1 = { 1500, 2900 };
但我不能找到一個合適的語法來創建臨時對象,並將其傳遞作爲參數傳遞給一些方法,例如:
void frobnicate(const Aggregate& arg) {
// do something
}
//...
frobnicate(Aggregate {1500, 2900}); // what should this line look like?
最簡單的方法會將構造函數添加到Aggregate類,但是讓我們假設我沒有訪問Aggregate標題的權限。另一個想法是寫某種工廠方法,即
Aggregate makeAggregate(int x, int y).
我還可以創建一個對象,然後將其作爲參數傳遞,等等,等等
解決方法有很多,但我我只是好奇,如果有可能實現這個目標使用大括號初始化。
呃......如果你沒有訪問標題,你不能假定對象可以使用大括號初始化,可以嗎? – unwind 2009-10-06 12:36:44
實際上,makeXXX方法並沒有那麼糟糕。最近的編譯器能夠應用NRVO(命名的返回值優化),從而導致高效的代碼。當應用NRVO並且內聯函數時,就效率而言,這相當於C++ 0x語法。 – sellibitze 2009-10-06 13:14:20