ardupilot开发 --- C嘎嘎 篇

在这里插入图片描述

长生不老?三界六道不就毁在这4个字上?


本篇小编采用查漏补缺、拾遗形式的记录方式,职场虐我千百遍,唯C++待我如初恋,QAQ,我们开始吧,好记性不如烂笔头,书山有路勤为径,学海无涯苦作舟!

知识点手册查询

菜鸟教程
文心一言

介绍

四大特性:

  • 封装(Encapsulation):封装是将数据和方法组合在一起,对外部隐藏实现细节,只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。
  • 继承(Inheritance):继承是从已有类中派生出新类,新类具有已有类的属性和方法,并且可以扩展或修改这些属性和方法。这样可以提高代码的复用性和可扩展性。
  • 多态(Polymorphism):多态是指同一种操作作用于不同的对象,可以有不同的解释和实现。它可以通过接口或继承实现,可以提高代码的灵活性和可读性。
  • 抽象(Abstraction):抽象是从具体的实例中提取共同的特征,形成抽象类或接口,以便于代码的复用和扩展。抽象类和接口可以让程序员专注于高层次的设计和业务逻辑,而不必关注底层的实现细节。

版本

  • C++11
    2011年发布;
    文言一心:C++11主要特性有哪些?
    主要特性:
    • 自动类型 auto
    • 基于范围的 for 循环:for(auto& elem : container) { /* 使用elem */ }
    • 右值引用和移动语义
    • 初始化列表:std::vector v = {1, 2, 3, 4, 5};
    • Lambda表达式:auto lambda = [](int x, int y) { return x + y; };
    • 类型推导 decltype
      decltype关键字用于在编译时推导表达式的类型:decltype(a + b) c; // c的类型与a + b的结果类型相同;
    • 默认和删除的成员函数
      允许显式地声明特殊成员函数(如构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符)的默认行为(使用= default)或禁止其自动生成(使用= delete)。
      示例:MyClass() = default; MyClass(const MyClass&) = delete;
    • 空指针 nullptr
      以替代旧的 NULL 宏。nullptr具有明确的类型(std::nullptr_t)。
    • 其他重要特性
  • C++14
    2014年发布;
    文言一心:C++14主要特性有哪些?
    主要特性:
    • Lambda表达式增强
      捕获列表中直接初始化变量:auto func = [y = 2]() { return y * 2; };
    • constexpr函数增强;
    • 废弃标志[[deprecated]]
      标记已弃用的函数、类或其他声明;
      在编译时提醒开发者不应再使用某个已标记为过时的API.
      //为oldFunction函数定义一个“deprecated”属性
      [[deprecated("this function will be removed in v2.0")]]  
      void oldFunction() {
               
          // ...  
      }
      
    • 读写锁 std::shared_timed_mutexstd::shared_lock
      C++14扩展了线程支持库,引入了std::shared_timed_mutex作为新的互斥量类型,它支持共享(读)锁定和独占(写)锁定。同时,新增了std::shared_lock类模板,作为一个便捷的共享锁管理器,提供了对std::shared_timed_mutex以及其他兼容锁类型的隐式锁定和解锁操作。
    • 变量模板
      变量模板用法类似于函数模版;
      //定义一个变量模版
      template<typename T>  
      T pi = T(3.14159);
      //使用这个变量模版(实例化变量模版)
      auto myPi = pi<double>; // myPi的类型是double,值为3.14159  
      auto myPiInt = pi<int>; // myPiInt的类型是int,值将被截断为3
      
    • 其他新特性…
  • C++17
    2017年发布;
    文言一心:C++17主要特性有哪些?
    主要特性:
    • Lambda表达式增强,C++17允许直接捕获*this作为值;
    • 类型推导改进
    • 结构化绑定
    • 标准库新增类型
    • 文件系统库
    • constexpr if
    • 折叠表达式
    • 内联变量 inline
    • 其他改进和新增…
  • C++20
    2020年发布;
    文言一心:C++20主要特性有哪些?
    主要特性:
    • 模块(Modules)
      背景:在C++中,传统的#include机制用于包含头文件,但这种方式存在效率低下、编译速度慢、依赖关系复杂等问题。
      新特性:C++20引入了模块的概念,作为对传统#include机制的一种改进。模块允许开发者将声明和定义封装在一个单独的文件中,并在其他文件中通过import语句来引用这些声明和定义。这可以显著提高编译速度,减少编译次数,并改善代码的组织方式。
    • 协程(Coroutines)
      概念:协程是一种特殊的函数,它可以在执行过程中暂停和恢复,而不会像传统函数那样一直执行到结束。C++20通过引入co_await、co_yield和co_return三个关键字来支持协程。这使得开发者能够以同步的方式编写异步代码,从而提高代码的可读性和可维护性。协程在编写网络编程、图形界面应用等需要异步处理的场景中特别有用。
    • 概念(Concepts)
      背景:在C++中,模板编程是一种强大的特性,但模板参数的类型约束往往需要在模板体内通过复杂的逻辑来实现。C++20引入了概念(Concepts),它是一种用于描述模板参数必须满足的条件或特性的机制。通过概念,开发者可以在模板声明时直接指定参数的类型约束,从而提高模板的易用性和安全性。
    • 范围(Ranges)
      背景:在C++中,算法通常与迭代器一起使用来操作容器中的数据。然而,迭代器的使用方式较为繁琐,且不够直观。C++20引入了范围(Ranges)库,它提供了一种更简洁、更直观的方式来使用算法。范围库允许开发者直接对容器或容器的一部分进行操作,而无需显式地使用迭代器。此外,范围库还提供了丰富的组合操作符,使得算法的组合更加灵活和强大。
    • 三向比较运算符(Three-way Comparison)
      背景:在C++中,比较运算符(如<>==等)通常用于比较两个对象的值。然而,对于自定义数据类型来说,需要手动实现这些运算符,这既繁琐又容易出错。C++20引入了三向比较运算符(<=>),它是一个重载的运算符,用于同时实现<、>和==等比较运算。通过三向比较运算符,开发者可以更方便地实现自定义类型的比较操作,并自动生成所有相关的比较运算符。
    • 其他新特性
      日期和时间库(Date and Time):C++20对日期和时间处理进行了增强&
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值