2012-11-04 10 views
8
void f(int count, ...){ 
    //whatever 
} 

struct somestruct{ 
    size_t a, b, c; 
}; 

int main() { 
    somestruct s; 
    f(1, s); //what is actually passed? 
} 

struct全体がコピーされてスタックに渡されますか?もしそうならコピーコンストラクタが呼ばれますか?ポインタは渡されていますか?これは安全ですか?structをvararg関数に渡すとどうなりますか?

+0

C++について質問する必要があります。 Cにはコピーコンストラクタはありません。 –

答えて

2

を参照してくださいよ新しいコピーとそれを引数として渡す。

+0

まあ、型が簡単にコピー可能でなければならない(そして 'g ++'はエラーを出力しなければならない)という制約がある場合、あなたの答えとbillzは同等かどうか? –

+0

@LorenzoPistone no。コピーコンストラクタは削除されてもプライベートであってもよい。それは必ずしも自明ではないが、それを呼び出すことは邪悪なものになるだろう。 –

1

void f(...)はビット単位のコピーを使用しています。 somestructには、C++ビルドイン型しかないので、デフォルトコンストラクタまたはコピーコンストラクタは生成されません。

Is this safe? 

はい、これは完全に安全です。

私はあなたが左辺値を渡す場合は、[はい、右辺値への変換左辺値はにオブジェクトをコピーするにはコピーコンストラクタを呼び出すことを意味し、実行されます「インサイドC++オブジェクト・モデル」chapter 2 The Semantics of Constructors

+0

参考になっていますか? –

+0

私は構造体が自明にコピー可能でなければならないことに気付きました。 –

+0

@LorenzoPistone:構造体はPODタイプでなければなりません。 –

関連する問題