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

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

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

整个struct复制并在堆栈上传递?如果是这样,是否调用了复制构造函数?指针是否通过?这安全吗?

4

2 回答 2

2

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

于 2012-11-04T02:54:04.920 回答
1

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

Is this safe?

是的,这是完全安全的。

我将向您推荐“内部 C++ 对象模型”chapter 2 The Semantics of Constructors

于 2012-11-04T02:06:51.357 回答