1 C++ RAII 惯用法
三种处理方法:
1.1 使用goto语句
- 使用goto不能跳过变量得初始化;
- goto 在没有跳转时,会顺序执行goto语句;
注意:
尽量不要使用goto,易造成程序混乱
1.2 使用do...while(0)循环
使用do...while(0) 跳出循环,保证异常处理可以执行
1.3 使用c++ 类析构
例如 std::lock_guard<std::mutex> lock(mtx)
使用
2 pimpl 惯用法
将内部函数和实例通过class impl 类封装可以保证对实际的使用者不可见,提高了程序的安全性,同时可以提高编译效率
pimpl 使用方法
3 c++11/14/17实用特性
编译指定:
- g++需要在编译时指定:
-std=c++11
- make 指定:
make CXXFLAGS="-g -O0 -std=c++11"
- cmake 编译指定:
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -std=c++11")
4 统一成员初始化
- {} :使用花括号初始化
std::initializer_list<T>
:使用编译初始化,包含头文件#include <initializer_list>
5 c++ 关键字和语法
- final :final关键字修饰一个类,这个类将不能被继承
- override : 子类重写了父类的方法
- =default : 使用默认构造函数等; 例如:
A() = default;
- =delete :禁止编译器生成这个函数的语法,例如:
A(const A& a) = delete;
- auto : 用于修饰
所有的局部变量
,同时可以做自动类型推导 - Range-based 循环语法: for-each
int arr[10] = {0};
for (int i : arr)
{
}
std::map<std::string, std::string> seasons;
for(auto iter: seasons)
{
// iter 1.不是指针类型 2. iter 是元素的拷贝
std::cout<< iter.second << std::endl;
}
6 C++17 结构化绑定
6.1 std::tuple 使用
std::tuple 类型可以存放多种类型:
std::tuple<std::string, int, int, std::string> userInfo("Tom", 23, 165, "student");
使用 std::get<N>
, 其中 N 是元素的序号(从 0 开始)
std::string usrName = std::get<0>(userInfo);
int age = std::get<1>(userInfo);
6.2 赋值结构化绑定
实例:
struct Point
{
double x;
double y;
};
Point myPoint(10.0, 20.0);
auto [myX, myY] = myPoint;
限制:
用于结构化绑定的变量不能使用constexpr 修饰或声明为static
7 STL 新增方法
7.1 emplace 系列函数
原方法 | c++11 改进方法 | 方法含义 |
---|---|---|
push/insert | emplace | 指定原位构造插入 |
push_front | emplace_front | 容器首位构造插入 |
push_back | emplace_back | 容器尾部构造插入 |
emplace系列的函数原位构造元素,减少了变量的赋值构造,提高了代码效率,push等会先产生一个对象,然后将这个对象放入集合中,这样就分别调用了一次构造函数,拷贝构造函数和析构函数,即避免不必要的临时对象的产生 |
---|
7.2 std::map 中的try_emplace
try_emplace
注意是c++17后的特性:返回值为std::pair<T1, T2>
- T1 为map的迭代器:成功返回插入位置的元素迭代器,失败返回已存在的相同key元素的迭代器。ac
- T2 为bool :成功返回true,失败为false
7.3 std::map 中insert_or_assign
insert_or_assign 结果为存在则直接更新value,不存在则直接插入
7.4 智能指针
原文链接: https://www.cnblogs.com/lihaihui1991/p/15101297.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/400323
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!