如果我将结构传递给vararg函数会发生什么?

时间:2012-11-04 01:59:36

标签: c++ variadic-functions

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

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

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

整个struct是否被复制并传递到堆栈中?如果是这样,复制构造函数被称为?指针是否通过?这样安全吗?

2 个答案:

答案 0 :(得分:2)

是的,如果传递左值,则左值转换的左值将完成,这意味着调用复制构造函数将对象复制到新副本并将其作为参数传递。

答案 1 :(得分:1)

void f(...)正在使用bit-wised副本。不会为somestruct生成默认构造函数或复制构造函数,因为它只有C ++内置类型。

Is this safe?

是的,这非常安全。

我将向您推荐'Inside C ++ Object Model'chapter 2 The Semantics of Constructors