C オブジェクトを独自のコンストラクターに渡す: 合法ですか?
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 中国語 Web サイトの他の関連記事を参照してください。