目录
1. 默认初始化(Default Initialization)
3. 直接初始化(Direct Initialization)
6. 聚合初始化(Aggregate Initialization)
7. 引用初始化(Reference Initialization)
8. 成员初始化列表(Member Initialization List)
9. 显式初始化(Explicit Initialization)
10. 延迟初始化(Lazy Initialization)
11. 常量初始化(Constant Initialization)
12. 静态初始化(Static Initialization)
摘要
在C++中,初始化变量的方法非常多,涵盖了多种类型的初始化方式。以下是C++中的常见初始化类型:
1. 默认初始化:未定义值或调用默认构造函数。
2. 值初始化:将变量初始化为零或调用默认构造函数。
3. 直接初始化:通过括号传递参数进行初始化。
4. 拷贝初始化:使用赋值运算符进行初始化。
5. 列表初始化:使用大括号进行初始化,避免窄化转换。
6. 聚合初始化:用于数组和 `struct` 等聚合类型的初始化。
7. 引用初始化:引用变量必须在声明时进行初始化。
8. 成员初始化列表:在类的构造函数中初始化成员变量。
9. 显式初始化:使用显式构造函数进行初始化。
10. 延迟初始化:在需要时才进行初始化。
11. 常量初始化:常量变量在编译时完成初始化。
12. 静态初始化:静态变量的初始化在程序启动时完成。
1. 默认初始化(Default Initialization)
默认初始化是指在声明变量时不提供初始值。对于内置类型变量,其值是未定义的;对于类类型变量,会调用其默认构造函数。
#include <iostream>
class MyClass {
public:
int x;
MyClass() : x(0) {
std::cout << "MyClass default constructor called\n";
}
};
int main() {
int a; // 未定义值
MyClass obj; // 调用 MyClass 的默认构造函数
std::cout << "obj.x: " << obj.x << std::endl; // 输出 0
return 0;
}
2. 值初始化(Value Initialization)
值初始化会将变量初始化为零值。对于类类型,会调用其默认构造函数。
#include <iostream>
class MyClass {
public:
int x;
MyClass() : x(0) {
std::cout << "MyClass default constructor called\n";
}
};
int main() {
int a = int(); // 初始化为 0
MyClass obj = MyClass(); // 调用 MyClass 的默认构造函数
std::cout << "a: " << a << std::endl;
std::cout << "obj.x: " << obj.x << std::endl;
return 0;
}
3. 直接初始化(Direct Initialization)
直接初始化通过括号传递参数进行初始化。
#include <iostream>
class MyClass {
public:
int x;
MyClass(int val) : x(val) {
std::cout << "MyClass(int) constructor called\n";
}
};
int main() {
MyClass obj(10); // 调用 MyClass(int) 构造函数
std::cout << "obj.x: " << obj.x << std::endl;
retur