初始化:对象创建时被赋值
eg: 类名 变量名 赋值
Num b(1);
Num c=1;
Num a{1};
使用{}的初始化称为列表初始化
能防止窄化(收缩)转换
Num d={1};
int a{};
//a被赋值为0
double b{};
//b被赋值为0.0
char* p{};
//p被赋值为nullptr
vector<int>c{};
//c被赋值为一个空向量
string s{};
//s被赋值为""
char buf[10]{};
//buf中的所有元素为0
int *p=new int{}
//*p的值为0
char *q{new char[1024]{}};
//q中的所有元素为0
为防止初始化数值与被初始化成员的类型不匹配,导致的数据由宽变窄或者出现数据丢失的情况(窄化转换),引出"auto"可自动根据输入成员的内容识别出最适合的成员类型
#include <iostream>
#include <string>
using namespace std;
int main()
{
auto a = 10;
auto b = 'y';
auto c = { 1,2,3 };
auto d = 12123.999;
auto e = { "230","1ej","29ei","9rfvh","298" };
cout << typeid(a).name() << endl << typeid(b).name()
<< endl << typeid(c).name() << endl << typeid(d).name()
<< endl<< typeid(e).name()<< endl;//输出变量类型
for (auto& x :e)//输出e的所有数据
cout << x << " ";
cout << endl;
return 0;
}
运行输出auto自动识别的变量类型可知:
当遇到复杂情况,如变量e时,auto作用清晰显现;
17行代码输出变量e的全体成员内容:
运行代码如下: