c++11
class Test {
public:
Test(int n) {}
Test() :Test(0) {}
};
可以避免在不同的构造函数中重复编写相似的初始化代码,提高了代码的可维护性和可读性
struct Data {
int i = 1;
float f = 2.0;
bool b = true;
};
int main(){
char *s = NULL;//别用了
char *s = nullptr;
}
enum class Color {
Red,
Green,
Blue
};
int main() {
Color c = Color::Red;
if (c == Color::Red) {
}
return 0;
}
enum 强类型 无法进行隐式转换
对于各种数据类型,迭代器等可直接用auto进行类型推导
//迭代器
for (auto it = s.begin(); it != s.end(); it++) {
cout << *it << ' ';
//数据类型
auto a = 1;
//函数的返回值
auto add(int x,int y){
return x + y;
}
将运行时的计算提前到编译时来计算进行优化
可修饰变量,函数等等
constexpr int size = 10;
constexpr int square(int x) {
return x * x;
}
类似于普通数组的创建
vectora = { 1,2,3,4,5 };
mapa = { {1,1},{2,3},{3,5} };
一种新的元素遍历
原本的方式
vectorv = { 1,2,3 };
for (vector::iterator it = v.begin(); it != v.end(); it++) {
cout << *it;
}
新的遍历方式
vectorv = { 1,2,3 };
for (int c : v) {
cout << c << endl; //..不需要解引用
}
vectorve = { "早上","好","中国" };
for (string b : ve) {
cout << b;
}
mapmap = { {1,1},{2,3},{3,5} };
for (auto a : map) {
cout << a.first << "->" << a.second << endl;
}
C++17可以使用
mapm = { {1,"早上好"},{2,"你好"},{3,"晚上好"}};
for (auto [key,val] : m) {
cout << key << "->" << val << endl;
}
所需要的头文件 #include
#include
#include
using namespace std;
struct SomeDate {
int a, b, c;
};
void f() {
//常规写法
//SomeDate* date = new SomeDate;
//unique_ptr date(new SomeDate);
//推荐写法
auto date = make_unique();
date->a = 1;
date->b = 2;
date->c = 3;
}
make_unique指向对象唯一的智能指针
需要指针在不同函数间传递,或者多个指针指向同一个对象则使用shared_ptr
int main() {
vectora = { 1,2,3,4,5 };
auto it = find_if(a.begin(), a.end(), [](int x) {return x > 3; });
cout << *it;
}