编译器生成的默认构造函数在只用于初始化成员时比自己编写的什么都不做的构造函数更高效,原因是编译器生成的默认构造函数会使用成员的默认构造函数来初始化成员,而自己编写的什么都不做的构造函数需要显式调用成员的默认构造函数。
以下是一个代码示例来说明这个问题:
#include
class MyClass {
int x;
double y;
public:
MyClass() {
// 什么都不做,成员未初始化
}
MyClass(int a, double b) {
x = a;
y = b;
}
};
int main() {
MyClass obj1; // 使用编译器生成的默认构造函数
MyClass obj2(10, 3.14); // 使用自己编写的构造函数
std::cout << obj1.x << std::endl; // 输出未初始化的值
std::cout << obj2.x << std::endl; // 输出初始化的值
return 0;
}
在上述代码中,MyClass
类有一个成员变量 x
和 y
,并提供了两个构造函数。MyClass()
是自己编写的什么都不做的构造函数,而 MyClass(int a, double b)
是自己编写的用于初始化成员的构造函数。
在 main()
函数中,我们创建了两个对象 obj1
和 obj2
,分别使用了编译器生成的默认构造函数和自己编写的构造函数。然后输出了它们的成员变量 x
的值。
运行结果会输出未初始化的值(垃圾值)和初始化的值。这是因为编译器生成的默认构造函数未对成员进行初始化,而自己编写的构造函数对成员进行了初始化。
因此,使用编译器生成的默认构造函数可以更高效地初始化成员,避免了显式调用成员的默认构造函数的开销。