0. 什么是C++

什么是C++

是C语言的扩展,有如下的两个特性:

  • 关注性能
    • 与底层硬件紧密结合
    • 对象生命周期精确控制
    • 零成本抽象(Zero-overhead Abstraction)
  • 引入大量利于工程实践的特性
    • 三种编程范式:面向过程(Imperative Programming)、面向对象(Object-oriented Programming)、泛型(Generic Programming)
    • 函数重载、异常处理、引用

零成本抽象(Zero-overhead Abstraction):

#include <iostream>

consteval unsigned int sum(unsigned int x)
{
    unsigned int result = 0;
    for(unsigned int i = 0; i < x; ++i){
        result += i;
    }
    return result;
}

int main(void)
{
    unsigned int res = sum(4);
    std::cout << res << std::endl;
}

上述代码中,使用了一个C++ 20 的关键字 consteval ,该关键字的作用是让包含该关键字的函数在编译器就被执行,返回结果。这样子增加了编译期间的时间成本,但是可以大幅加快运行期间的速度。使用gcc生成的汇编指令如下:

main:
        push    rbp
        mov     rbp, rsp
        mov     eax, 6
        pop     rbp
        ret

可以看到,在这里直接返回了结果 6

注意,上述代码在编译的时候,要指定C++的版本为20才可以,不然会导致编译出错。

g++ -std=c++20 -Wall constevel.cpp -o constevel
  • 一系列不断演进的标准集合
    • C++ 的标准:98/03、11、14、17、20、23
    • 语言本身的改进
      • 内存模型(Memory Model)
      • Lambda表达式(Lambda Expression)
    • 标准库的改进
      • type_traits/ranges
      • auto_ptr(后被shared_ptr等替代,C++17 中遗弃)
  • C++ 标准的工业界实现

注意:

  • 不能使用具体的语境讨论C++
  • 编写程序时需要注重:
    • 性能
    • 标准(避免移植的问题,尽量减少平台特化工具的使用)
  • 写程序的捷径
    • 编程不是学出来,而是练出来的
    • 反复应用中积累,忽而有一天就能“顿悟”
    • 学习原则
      • 从感官到原理
      • 从使用别人的到创建自己的
      • 必须亲手实践
      • 必须学以致用,紧跟实际工作
      • 追求实用,不搞“学院派”

posted @ 2024-01-24 21:44  kobayashilin1  阅读(17)  评论(0编辑  收藏  举报