C++ クラスには 5 つの既定のメンバーがあります。デフォルトのコンストラクタ、デストラクタ、コピー コンストラクタ、代入演算子、およびアドレス演算子。
アドレス演算子とは何ですか? ですか
className* operator &() {}
?もしそうなら、コンパイラがデフォルトでこのアドレス演算子を生成するのはなぜですか (C には既にアドレス演算子があり、この余分なオーバーヘッドなしでオブジェクトのアドレスを取得できるため)。何か特別な目的はありますか?
C++ クラスには 5 つの既定のメンバーがあります。デフォルトのコンストラクタ、デストラクタ、コピー コンストラクタ、代入演算子、およびアドレス演算子。
アドレス演算子とは何ですか? ですかclassName* operator &() {}
?
もしそうなら、コンパイラがデフォルトでこのアドレス演算子を生成するのはなぜですか (C には既にアドレス演算子があり、この余分なオーバーヘッドなしでオブジェクトのアドレスを取得できるため)。何か特別な目的はありますか?
演算子のオーバーロードの解決に関する C++ 標準のセクション 13.3.1.2 には、次の規則があります。
演算子が
operator ,
、単項operator &
、または でありoperator ->
、実行可能な関数がない場合、その演算子は組み込み演算子であると見なされ、条項 5 に従って解釈されます。
operator&
デフォルトですべてのタイプにメンバーが提供されている場合、実行可能なセットが空になることはありません。実行可能なセットが空の場合に何をすべきかについての規則があるため、最初は型に member がないことを確認できますoperator&
。