c++基本知会

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大佬

    c++基本知会

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/400323

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月14日 下午2:05
下一篇 2023年4月14日 下午2:05

相关推荐