C++常用关键字

一.通用关键字

1.inline:优化函数调用,减少调用开销,将函数体直接嵌入调用点。

  • 适用于小型、频繁调用的函数(如工具函数、简单数学运算)。
  • 在头文件中定义函数时,避免多重定义错误。

2. noexcept指明函数不会抛出异常,便于编译器优化和提高代码安全性。

  • 明确不会抛出异常的函数(如析构函数、移动构造函数)。
  • STL 配合,优化性能。

3. auto:自动分配类型,相当于C#中的var

4.vector

  • std::vector 是一个功能强大的动态数组容器,适用于大多数需要动态大小的场景。
  • 提供了丰富的操作函数,支持高效的随机访问和与 STL 算法的无缝结合。
  • 在需要频繁插入和删除的场景中,可以考虑使用 std::list std::deque
    • std::vector

      • 数据是连续存储的,可以通过下标快速访问。
      • 当容量不足时,会重新分配更大的内存块,并将所有元素复制到新内存中。
    • std::list

      • 数据是分散存储的,每个节点包含元素和指向前后节点的指针。
      • 插入和删除时只需要调整指针,不会影响其他节点。

5.reinterpret_cast

  • reinterpret_cast 是一种强大的类型转换工具,但它类型不安全,可能导致未定义行为。
  • 它适用于底层开发场景,如硬件交互、网络协议处理、位操作等。
  • 在普通应用程序中,应尽量避免使用,并优先选择更安全的类型转换运算符(如 static_cast dynamic_cast)。
  • 使用时需要非常谨慎,确保转换是有意义的且不会引发未定义行为。
  • 类型转换特点适用场景
    static_cast 编译时类型检查,适用于相关类型之间的转换。 基本类型之间的转换(如 int float),或具有继承关系的类之间的转换。
    dynamic_cast 运行时类型检查,仅适用于具有多态(virtual)的类。 用于检查和转换父类与子类之间的类型。
    const_cast 用于移除或添加 const 限定符。 需要修改 const 对象或指针的场景。
    reinterpret_cast 类型不安全,允许在完全不相关的类型之间进行转换。 底层开发中,处理指针、位操作、字节流等低级操作。

6.make_unique

  • std::make_unique 是一种安全、高效、简洁的方式来创建 std::unique_ptr
  • 它支持通过参数包 Args&&... 将参数转发给目标类型的构造函数。
  • 对于数组类型,std::make_unique 只能创建默认构造的数组。
  • 它能够避免手动管理动态内存带来的复杂性和潜在错误,是现代 C++ 编程的推荐做法。

6.unordered_set

  • std::unordered_set 是一个高效的无序集合,适用于需要快速插入、删除和查找的场景。
  • 它以哈希表为底层实现,依赖哈希函数和相等比较函数来管理元素。
  • std::set 相比,std::unordered_set 提供更快的操作(平均情况下),但不保证元素的顺序。
  • 在存储自定义类型时,可以为 std::unordered_set 提供自定义的哈希函数和比较函数。

7.call_once

  • std::call_once 是一个线程安全的工具,用于确保某段代码只执行一次。
  • 它与 std::once_flag 配合使用,适用于线程安全的单例模式、资源加载等场景。
  • 相比手动锁管理,更加简洁和高效,推荐在需要“只执行一次”的场景中使用。

8.emplace_back

  • emplace_back C++11 中引入的高效方法,用于直接在容器内构造元素。
  • 它避免了对象的额外拷贝或移动操作,适合插入复杂对象或需要高性能的场景。
  • 在现代 C++ 编程中,推荐优先使用 emplace_back,而不是传统的 push_back,特别是在需要构造新对象时。

9.&

用途含义
地址运算符 获取变量的地址:int* ptr = &a;
引用声明 声明一个引用:int& ref = a;
按引用传递参数 函数参数按引用传递:void func(int& x);
按位与运算符 按位与操作符:int result = a & b;
声明指针引用类型 传递指针的引用:void func(int*& ptr);
右值引用结合 区分左值引用和右值引用:foo(int& lref) foo(int&& rref)
模板类型推导 用于区分模板中左值引用和右值引用:checkType(T& x) checkType(T&& x)

 

特性左值引用右值引用
符号 & &&
绑定对象 左值 右值
用途 修改和操作已有对象 移动语义、资源转移
生命周期 可绑定到持久对象 绑定到临时对象
是否可修改 通常可修改 通常可修改

 

10.using

用法场景描述
类型别名 定义类型别名,替代 typedef
模板别名 定义模板别名,简化模板类型的使用。
命名空间别名 为命名空间创建别名,简化长命名空间的使用。
引入特定成员 从命名空间中引入特定成员,避免使用前缀。
引入整个命名空间 引入整个命名空间,简化代码书写(需谨慎使用)。
类成员可见性控制 在派生类中让基类的某些成员可见。
重载函数的引入 在派生类中引入基类的所有重载函数,避免隐藏。
控制访问权限 改变基类成员的访问权限(如将 protected 提升为 public)。

 

11.

posted @ 2025-04-29 11:02  Fish_Liu  阅读(38)  评论(0)    收藏  举报