#pragma once
//上下等价
#ifndef BitFlip_H
#define BitFlip_H
//the content of BitFlip_H header file
#endif // !BitFlip
1.切勿在头文件中使用using指令或者using 声明 否则添加你的头文件的每个人都要用这个空间。
2.命名空间嵌套在17标准中得到了极大的简化
3.声明变量的时候不指定值,变量的值取决于这块内存的值
4.17中允许if中加入初始化器
if (int a = 0;a>0) {
}
5.
std::array<int, 3> arr = { 1,1,1 };//固定大小 #include<array> 11标准
int size=std::size(arr);
6.C++程序中内存分为堆和栈,函数的执行一般在栈上进行,用完释放。明确的分配内存一般是放在了堆上。(在函数中声明的也要释放掉)
int* a;
*a = 0;
delete a;//delete[] a---删除数组
a = nullptr; 删除指针后最好进行置空操作防止再次的使用
7.
//make_unique在超过作用域或者被删除时就会自动释放内存资源
auto an=make_unique<BitFlip>();
//共享指针,每次指定make_shared时都会递增一个引用计数,表示数据又多了一个拥有者,当超过作用域时,就递减引用计数,直到为0时,释放资源
auto an1 = make_shared<BitFlip>();
8.const多种用法(如果需要给函数传递对象,最好按const引用传递他,这样可以防止多余的复制。如果需要改变对象,则需要传递非const引用)
//保护参数
void get(const string* a) {
*a = "ddd";//不通过
}
const int a = 1;//保证代码不会改变该变量的值
//变量x和引用变量re指向同一个值,改变一个,则都会变
int x = 1;
int& re = x;
9.auto 去除了const限定和引用 因为auto创建一个副本 。除非用auto &
//第一个const函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类型指针
//第二个 任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性
const int& Get() const {
}