17

クラスのインスタンスを作成するのとは逆のことをしたいnoncopyable、つまり、特定のクラスのインスタンスがコピーとしてのみ渡され、参照として渡されないようにします。関数が参照によってそれを受信しようとすると、(理想的には) コンパイル エラーまたは実行時エラーが発生するようにします。

プライベートにすることでそれができるとは思いoperator &ません。これを行う正当な方法はありますか。

4

2 に答える 2

22

それ無理。名前付き変数は、適切なタイプの参照変数にバインドできます。それが言語のしくみです。

特に、制限付きのコピーコンストラクターを持つことはできないため、実際にオブジェクトを値で渡すことはできませんでした。

于 2012-11-05T16:23:00.383 に答える
7

オペレーターとプライベートを作ることでそれができるとは思いません。これを行う正当な方法はありますか。

いいえ、&参照渡しの関数シグネチャで使用する は演算子ではないためです。アドレス演算子 (単項) またはビットごとの AND 演算子 (バイナリ) のいずれかについて話している。したがって、参照渡しとは何の関係もありません。

type の参照渡しを禁止する方法はありません

あなたの動機がこれを行うのに十分強いとは思えません。また、パスのメカニズムをよく理解していないようです。

関数が参照によってそれを受信しようとすると、(理想的には) コンパイル エラーまたは実行時エラーが発生するようにします。

関数は、パラメーターを参照または値で渡します。それはその宣言によって決定され、あなたの混乱はここから生じていると思います。例えば:

void foo(X x);

パラメータxを値で受け取ります。参照で渡す方法はありません。とんでもない。同じく:

void foo(X& x)

参照によってそれを受け取り、常にそうします。

于 2012-11-05T16:27:22.323 に答える