將 C 物件傳遞給它自己的建構子:合法嗎?
發現從自身建構一個物件可能會令人驚訝C確實是允許的。以下程式碼示範了這種意外行為:
#include <iostream> struct Foo { Foo(Foo& bar) { std::cout << &bar << std::endl; } }; int main(int argc, char** argv) { Foo foo(foo); // This works! std::cout << &foo << std::endl; // And this works too... }
在此程式碼中,Foo 類型的物件作為參數傳遞給自己的建構子。這可能看起來是一個循環定義,但 C 標準實際上允許這樣做。
儘管物件 foo 未初始化,但程式碼以標準允許的方式操作它。具體來說,在物件完全初始化之前,允許綁定對其的引用或取得其位址。
缺陷報告 363 進一步解釋了此行為,該報告得出的結論是引用有效並且允許獲取類別對像在完全初始化之前的地址並將其作為引用參數提供。
雖然利用此行為可能不尋常或不切實際,但它提供了對內部物件的深入了解類別的工作方式以及操作未初始化物件的有限方式。
以上是您可以使用自身作為參數來建構 C 物件嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!