1 默认初始化 Default initialized
- 内置类型变量
- 在函数(包括
main 函数)内部定义,则不初始化 - 在函数外部定义,则初始化为0
- 类类型变量:因类各异
string 对象被初始化为空字符串vector 对象被初始化为空vector
示例
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int i1;
double d1;
char c1;
string s1;
vector<int> v1;
int main()
{
int i2;
double d2;
char c2;
string s2;
vector<int> v2;
return 0;
}
2 列表初始化 List initialized
列表初始化使用花括号{} 来初始化变量
列表初始化示例
int i{1};
double j = {3.14};
vector<char> cvec{'a','b'};
N.B.
如果使用列表初始化且初始值存在丢失信息的风险,则编译器将报错
long double ld = 3.1415926536;
int a{ld};
int b = {ld};
int c(ld);
int d = ld;
3 圆括号初始化
圆括号初始化使用() 来初始化变量
常见示例
double d(1.3);
string s1(5,'c');
N.B.
类内初始值不能用圆括号初始化,只能用拷贝初始化或列表初始化
struct foo
{
int a(1);
int a{1};
char c = 'f';
}
4 拷贝初始化 Copy initialization 与 直接初始化 Direct initialization
使用赋值运算符= 就是拷贝初始化,否则就是直接初始化
示例
string s5 = "hello";
double d{10.1};
vector<int> vint(4,9);
如果要用多个值进行初始化,推荐使用直接初始化
string s1(5,'c');
string s2 = string(5, 'c');
5 值初始化 Value-initialized
- 内置类型被初始化为0
- 类类型由类的默认构造函数初始化(如
string 初始化为空串)
vector 对象的值初始化
vector<int> vint1(5) = {1,2,3};
vector<double> vdb1(4);
vector<string> vs1(3);
数组对象的值初始化
int a1[5]{1,2,3};
int a2[5] = {};
局部静态变量的值初始化
int fun()
{
static int var;
return var;
}
Reference C++ Primer
|