2012-03-09 3 views
1

関数内のポインタをconstに(引数として)指すオブジェクトを、関数内の一時的なスタック割り当てのオブジェクトにコピーしたい私は操作したり、さまざまなチェックをすることができます。 const_castを利用して不正行為をすることなく、これをどうやって行うのですか?一時的な使用のためのオブジェクトを定数ポインタのパラメータのターゲットからコピーする

bool f(const Foo* foo) 
{ 
    (Create a temporary copy of foo) 
    (Manipulate temporary copy of foo to test validity) 
    (Output bool) 
} 
+0

なぜあなたは 'const_cast'が必要かもしれないと思いますか?ローカルコピーが必要な場合は、値渡しするのはいかがですか? –

+0

基本的には、一時オブジェクトを作成して逆参照されたfoo-pointerの値を代入しようとすると、コンパイラエラーが発生します。「const foo *からfoo *に変換できません。 –

答えて

3

あなたの機能がすべてのものであれば、なぜ値渡しではないのですか?

+0

オブジェクトがかなり大きいためです。 –

+1

しかし、あなたはそれをとにかくコピーします... – ebutusov

+0

Ha。いい視点ね。私は睡眠不足を責める。両方に感謝! –

1

これはconstポインタではなく、constへのポインタです。コピーは常にちょうどこのように、コピーコンストラクタを使用している:

bool f(const Foo* foo) { 
    Foo tmp(*foo); 
    // use tmp 
    return file_not_found; 
} 

あなたがconst_castを使用する必要性を感じるたびに、あなたはおそらく何か間違ったことをやっています。

+1

適切にコーディングされたコピーコンストラクタは、const参照をパラメータとして受け入れます。それが非constを必要とするなら、それはヘッダーの単純な間違いか、本当に悪いコードのにおいです。 –

+0

システムでは複数の回答を受け入れることはできませんが、あなたも本当に役に立ちました!ありがとう! –

+0

@ChristopherBerman:とにかく、ここではもう1つの方が良い選択です。 –

0

関数内に新しいFooオブジェクトを作成し、それに引数の内容をコピーします。

+0

助けてくれてありがとう! –

関連する問題