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没有复制构造。 –