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
複製並傳遞到堆棧上?如果是這樣的複製構造函數調用?指針是否通過?這安全嗎?如果我將一個結構傳遞給可變參數函數,會發生什麼?
是的,如果你傳遞一個左,左值到右值的轉換也多,這意味着調用拷貝構造函數對象複製到新的副本並將其作爲參數傳遞。
那麼......但是如果你仍然有這樣的約束:類型必須是可複製的(並且你這樣做,否則'g ++'會輸出一個錯誤),那麼你的答案和billz是等價的還是不相等的? –
@LorenzoPistone no。複製構造函數可能被刪除或私有。它不一定是不平凡的,但稱它是不合格的。 –
void f(...)
正在使用位控制副本。您的somestruct
將不會生成默認構造函數或複製構造函數,因爲它只有C++內置類型。
Is this safe?
是的,這是非常安全的。
我將把你「裏面的C++對象模型」 chapter 2 The Semantics of Constructors
你有參考嗎? –
我注意到現在結構必須是可複製的。 –
@LorenzoPistone:結構必須是POD類型。 –
你一定在問C++; C沒有複製構造。 –