2015-05-08 89 views
0

使用省略號在接受採訪時有人問我以下問題代碼未被泄露時的編譯和執行;在代碼

考慮下面的代碼片段,其中省略號(...)表示沒有被透露給你的代碼:

class X { … }; class Y { public: explicit Y(const X& x); … }; 

什麼都可以你說下面的每一個陳述的彙編和執行?描述該代碼執行時發生的每個操作。

Y func(Y y) { … } 
X x; 
Y y = func(Y(x)); 

我無法正確理解問題,因此無法回答。如果有人能夠解釋我對我的期望有什麼答案,或者分享我可以經歷的任何鏈接,那將非常好。非常感謝。

+3

這種情況下的省略號可能意味着未公開的部分是不相關的。 –

+0

省略號在C++中對可變參數函數(http://en.cppreference.com/w/cpp/utility/variadic)和C++ 11可變參數模板(http://en.wikipedia.org/wiki/Variadic_template)有效。 。但這不是他們在這裏的意思。在這種情況下,他們的意思是「假設紙上的所有內容都與問題無關」。 –

回答

1

也許...意味着可能有一些代碼,這可能會影響代碼的編譯和執行?

什麼是發生在代碼:

  • X默認構造函數被調用時,
  • func(Y(x))被稱爲:Y(x)構造函數顯式調用從x創建ÿ對象。

彙編代碼取決於(其中包括)有關XY構造,例:

  • 添加專用的默認構造函數來X防止代碼編譯,
  • 加入私人拷貝構造函數來Y防止編譯代碼。
1

Y func(Y y) { … }只能工作如果Y至少複製或移動構造,否則你就沒有從函數返回或傳遞參數到它的方式。

X x只有在X有默認構造函數時纔有效。

Y y = func(Y(x));只會在Y複製或移動構造函數時才起作用。

Here就是一個例子。