Cmake

Cmake

Winter Lv4

可以开始了解CMake

只是简单得贴一个网址

[CMAKE](CMake Tutorial — CMake 3.27.4 Documentation )

CPPformal

json

[redfiredoc](快速开始 - Redefine Docs (ohevan.com) )

Cmake

  • 需要设置最小要求版本
  • 一个术语  source of truth 就是可以用来指一个权威数据来源 大概就是一些重要常量或者是预定义宏 

C++ review with the tinyrender

  • Oriented-object programming

    • 用户。类的用户就是使用类的程序(员)。这是通常情况。与程序的用户不一样。

    • inline 最好写在外面的定义处

    • mutable 可变数据成员 永远可以改变 具体例子就是外面想要设计一个计数器来统计这个类的实例次数 无论是作为const还是非const都要计数

    • 类内初始化只能用花括号和等号 这里区分下圆括号和花括号 两者本身都是一样的调用构造函数只是有些区别 一花括号不允许隐式转换;二花括号才能用在类内三花括号才能默认构造函数

    • const成员重载 显然只用底层const才能重载通常会借用一个共有的const功能函数

    • 尽量多些工厂函数

    • 友元类,类中所有的函数都可以访问原来的函数的所有成员

    • volatlile 就是告诉编译器不能优化的意思。基本语法限制和const完全一样。也存在底层顶层,也存在数组对象。两者可以同时叠加的。

    • constexpr 由数据类型和初始值同时决定。const 字面量。关键判断就是能不能在编译的时候就知道是不是能求值。constexpr 函数

    • 默认形参永远符合位置解析。所以需要进行覆盖的话必须要满足位置。这是一个比较大的限制,默认形参声明在函数声明里面,并且函数可以多次声明,对于已经声明过默认形参的形参,下一次声明时,直接省略就好,不能重复声明。在定义函数的时候也可以写默认形参,但是依然不能重写已经存在的。同时默认形参的初始值,可以是除了局部变量外的所有值,求值发生在运行阶段

    • **字面值类型——算术,指针,引用/  而io 类之类就不是字面值类型。 constexpr 函数形参返回值都是字面值类型。同时有且只有一个return 语句在函数体里面 函数调用的时候编译器会将此类函数转换为对应字面值。同时返回的表达式不一定是常量。看函数调用情况。 constexpr int scale(int size){return new_fun()size} 假如new 是一个constexpr func 若size是常量返回就是常量表达式*

    • 函数参数传递,理解的关键就是要知道形参对象和局部变量一样都会申请堆的空间然后自动销毁。所以就明白了引用传参和拷贝传参。传参相当于初始化。初始化const当然是不是const都无所谓 重载的时候 顶层是无法区分形参的,因为适用的参数都相同,所以不能区分重载。只有底层才能重载,因为此时的 const不能转换为其他类型。

    • 只有const_cast<T*> 可以改变,同时也只能改变变量的底层const 属性

    • 函数定义中没有命名的参数,其实可以有,只要函数体没有使用就可以的。例如 ++ 运算符的使用情况。static_cast 本质就是覆盖编译器的类型检查,因为大多数类型检查都是根据静态类型进行的

    • 位域 不能取地址的,通常定义为无符号类型 只能整型和枚举类型 通常包含一些二进制运算和枚举常量枚举类似于 类 有class就是限定作用域的 没class就是不限定 同时可以同时定义对象变量 类似class  const对象必须定义时候初始化 枚举看似不用的原因是不提供初始值的情况下是从0开始的

    • 对于多重继承首先,用虚继承解决菱形继承问题。然后对于虚继承只会改变派生类的派生类的情况。并且在构造的时候顺序是按照派生列表顺序找到所有的虚基类然后按同样顺序初始化所有的非虚基类。默认的是默认构造函数,所以要保证默认构造函数存在。派生列表不允许多次出现同一个基类,但是实际继承没有什么限制,但是虚基类的问题只在继承时有关系,对于类中存在的变量不会有关系!!

  • Post title:Cmake
  • Post author:Winter
  • Create time:2023-09-12 17:11:06
  • Post link:https://spikeihg.github.io/2023/09/12/Cmake/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
if (hexo-config('comment.enable') == true && hexo-config('comment.use') != "") { if (hexo-config('comment.use') == "waline") { @require "./waline.styl" } else if (hexo-config('comment.use') == "gitalk") { @require "./gitalk.styl" } else if (hexo-config('comment.use') == "twikoo") { @require "./twikoo.styl" } } .comments-container { display inline-block margin-top $spacing-unit width 100% #comment-anchor { width 100% height 10px } .comment-area-title { width 100% margin 10px 0 font-size 1.38rem color var(--default-text-color) font-family "Noto Sans", "Noto Sans SC",sans-serif font-weight bold i { color var(--default-text-color) } +redefine-tablet() { margin 5px 0 font-size 1.2rem } } }