1. nullptr(掌握)
nullptr是C++11推出的新的空指针,用于代替C语言的NULL。
#include <iostream>
using namespace std;
void func(int i)
{
cout << "A" << i << endl;
}
void func(char* c)
{
cout << "B" << c << endl;
}
int main()
{
func(NULL); // A0
func(nullptr); // B
return 0;
}
尽量使用nullptr代替NULL。
2. 类型推导(熟悉)
C++11支持auto和decltype进行类型推导。
#include <iostream>
using namespace std;
int main()
{
// i被推导为int类型
auto i = 5;
// a被推导为double
auto a = 5.5;
cout << i << endl;
cout << a << endl;
// b被推导为int*
auto b = new auto(10);
cout << *b << endl; // 10
delete b;
string s = "fdfd";
// c被推导为string
auto c = s;
cout << c << endl;
return 0;
}
auto只能对变量进行类型推导,但是decltype可以对表达式进行推导。需要注意的是,编译器只会计算类型,不会计算表达式的值。
#include <iostream>
using namespace std;
int main()
{
auto x = 1;
auto y = 2;
decltype(x+y*3.3+4.4) z = 12.3;
cout << z << endl; // 12.3
decltype(x+y) z2 = 12.3;
cout << z2 << endl; // 12
return 0;
}
3. 初始化列表(掌握)
C++11引入了初始化列表(列表初始化、通用统一初始化、一致性初始化)的写法,它使用{}进行初始化,例如之前数据窄化本质上就是一种特殊的初始化列表。
#include <iostream>
#include <vector>
using namespace std;
class Student
{
private:
string name;
int age;
public:
Student(string name,int age):name(name),age(age){}
void show()
{
cout << name << " " << age << endl;
}
};
int main()
{
// a被初始化为0
int a{};
cout << a << endl; // 0
// 初始化并推导长度
int arr[] = {1,2,3,4};
cout << sizeof(arr)/sizeof(int) << endl; // 4
// 初始化
vector<int> vec{3,3,4};
for(int i: vec)
cout << i << endl;
Student s{"张三",18};
s.show();
Student s2 = {"李四",19};
s2.show();
return 0;
}
【思考题】本次课程中一共学习了哪些C++11的新特性?
- 智能指针
- 初始化列表,数据窄化
- for-each
- override
- nullptr
- 类型推导
- array
- 类型转换
- 继承构造
- constexpr
4. 输出(了解)
4.1 进制输出
C++默认cout输出的数字是十进制,可以切换为八进制和十六进制。
#include <iostream>
using namespace std;
int main()
{
cout << showbase; // 显示进制:八进制0前缀,十六进制0x前缀
cout << noshowbase; // 取消显示进制
cout << oct; // 切换为八进制
cout << 8 << endl; // 10
cout << hex; // 切换为十六进制
cout << 255 << endl; // ff
cout << dec; // 切换为十进制
cout << 2346 << endl; // 2346
return 0;
}
4.2 输出域
可以使用setw函数设置cout输出内容占用的宽度:
如果设置的输出域宽度大于输出内容的宽度,显示为输出域的宽度;
如果设置的输出域宽度小于输出内容的宽度,显示为输出内容的宽度。
#include <iostream>
#include <iomanip> //头文件
using namespace std;
int main()
{
// 输出域的宽度设置只能生效一次,需要每次输出前都设置
cout << setw(10) << "123" << "******";
cout << setw(10) << "123456789101112";
return 0;
}
标签:初始化,cout,推导,输出,int,nullptr,C++,include
From: https://blog.csdn.net/2301_77143270/article/details/142963454