что произойдет, если я передам структуру функции vararg?

void f(int count, ...){
//whatever
}

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

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

Весь struct скопировать и передать в стек? Если да, то как называются конструкторы копирования? Указатель передан? Это безопасно?

8

Решение

Да, если вы передадите lvalue, будет выполнено преобразование lvalue в rvalue, что означает вызов конструктора копирования для копирования объекта в новую копию и передачи его в качестве аргумента.

2

Другие решения

void f(...) использует побитовую копию. Никакой конструктор по умолчанию или конструктор копирования не будет создан для вашего somestruct так как он имеет только встроенные типы C ++.

Is this safe?

Да, это совершенно безопасно.

Я отошлю вас к «Внутри объектной модели C ++» chapter 2 The Semantics of Constructors

1

По вопросам рекламы [email protected]