void f(int count, ...){
//whatever
}
struct somestruct{
size_t a, b, c;
};
int main() {
somestruct s;
f(1, s); //what is actually passed?
}
全体がstruct
コピーされてスタックに渡されますか?もしそうなら、コピーコンストラクターは呼び出されますか?ポインタは渡されましたか?これは安全ですか?
void f(int count, ...){
//whatever
}
struct somestruct{
size_t a, b, c;
};
int main() {
somestruct s;
f(1, s); //what is actually passed?
}
全体がstruct
コピーされてスタックに渡されますか?もしそうなら、コピーコンストラクターは呼び出されますか?ポインタは渡されましたか?これは安全ですか?
はい、左辺値を渡すと、左辺値から右辺値への変換が行われます。つまり、コピーコンストラクターを呼び出してオブジェクトを新しいコピーにコピーし、それを引数として渡します。
void f(...)
ビット単位のコピーを使用しています。somestruct
C++ の組み込み型しかないため、既定のコンストラクターまたはコピー コンストラクターは生成されません。
Is this safe?
はい、これは完全に安全です。
「C++ オブジェクト モデルの内部」を参照してください。chapter 2 The Semantics of Constructors