void f(int count, ...){
//whatever
}
struct somestruct{
size_t a, b, c;
};
int main() {
somestruct s;
f(1, s); //what is actually passed?
}
Весь struct
скопировать и передать в стек? Если да, то как называются конструкторы копирования? Указатель передан? Это безопасно?
Да, если вы передадите lvalue, будет выполнено преобразование lvalue в rvalue, что означает вызов конструктора копирования для копирования объекта в новую копию и передачи его в качестве аргумента.
void f(...)
использует побитовую копию. Никакой конструктор по умолчанию или конструктор копирования не будет создан для вашего somestruct
так как он имеет только встроенные типы C ++.
Is this safe?
Да, это совершенно безопасно.
Я отошлю вас к «Внутри объектной модели C ++» chapter 2 The Semantics of Constructors