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コピーされてスタックに渡されますか?もしそうなら、コピーコンストラクターは呼び出されますか?ポインタは渡されましたか?これは安全ですか?

4

2 に答える 2

2

はい、左辺値を渡すと、左辺値から右辺値への変換が行われます。つまり、コピーコンストラクターを呼び出してオブジェクトを新しいコピーにコピーし、それを引数として渡します。

于 2012-11-04T02:54:04.920 に答える
1

void f(...)ビット単位のコピーを使用しています。somestructC++ の組み込み型しかないため、既定のコンストラクターまたはコピー コンストラクターは生成されません。

Is this safe?

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

「C++ オブジェクト モデルの内部」を参照してください。chapter 2 The Semantics of Constructors

于 2012-11-04T02:06:51.357 に答える