编译器合成的默认复制构造函数 一个没有定义自己的类做正确的事:它复制 从一个对象到另一个对象的所有成员。
我想做类似的事情。我想写一个方法
template <typename T>
T f(const T& obj) {
// for each member var i of obj, I want to call some method g(obj.i)
}
现在我不知道成员变量的名称是什么。如果这是 复制构造函数,我可以调用赋值运算符而不是 g。
很明显,编译器会这样做(但也许它是在推断出 类(class)成员的姓名)。甚至有可能做到这一点 对于任何类 T?
最佳答案
编译器有一些代表每个类的内部数据结构。当涉及到复制构造函数的合成时,它可以引用这个结构来弄清楚它需要发出什么代码(多少个拷贝,每个拷贝是如何完成的,以及成员的地址与源代码的关系)和目标对象地址)。
作为单纯的 C++ 程序员,您无权访问此内部编译时数据结构,因此您很不走运。您基本上必须列出成员,并希望您不要遗漏任何成员。
您或许可以使用预处理器(或者如果不是the 预处理器,那么<em>a 预处理器),使用可用于生成的额外信息注释您的结构定义每个成员的一个调用列表。
关于C++编译器如何合成默认的拷贝构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9398447/