modern-cpp:常量 变量及其{}初始化 类型推导
高速上手C++11/14/17/20阅读笔记
常量
nullptr
它能被隐式转换成任何指针类型的空指针值,或 C++ 中的任何成员指针类型的空成员指针值。用来代替C中NULL空指针,避免歧义。
constexpr(C++11)
常量表达式 —— 总是会产生相同结果且无副作用的表达式。C++ 标准中数组的长度必须是一个常量表达式,即使是一个const常数也不行。
- 修饰的函数可以使用递归。
- C++14 开始,constexpr 函数可以在内部使用局部变量、循环和分支等简单语句
1 | |
变量初始化
if和switch语句当中,支持临时变量(c++17)
初始化列表{}
C++11 引入了 花括号{} —— 的初始化语法,使得几乎所有对象(包括内置类型、自定义类型、容器等)都能用统一的形式来初始化:
1 | |
结构化绑定(C++11,C++17)
std::tuple(c++11)容器用于构造一个元组,进而囊括多个返回值。但是C++11/14 并没有提供一种简单的方法直接从元组中拿到并定义元组中的元素,管我们可以使用 std::tie 对元组进行拆包,但我们依然必须非常清楚这个元组包含多少个对象,各个对象是什么类型,非常麻烦。
C++17 完善了这一设定
1 | |
auto,decltype
在最新的C++14和C++20中,auto可在函数传参时使用,不过auto仍不支持推导数组类型。
decltype 关键字是为了解决 auto 关键字只能对变量进行类型推导的缺陷而出现的,和typeof很类似,不过typeof并不属于C++标准内,decltype 可以对关键字进行推导。
1 | |
bool std::is_same<T, U> 用于判断T和U这两个类型是否相等。
尾推导类型(C++11)
auto可以用于推导函数的返回类型,同时还可以配合decltype来使用(C++14),主要用于对转发函数或封装的返回类型进行推导。使我们无需显式的指定类型,从而写出如下的代码
1 | |
modern-cpp:常量 变量及其{}初始化 类型推导
https://weihehe.top/2025/10/13/modern-cpp:常量及初始化/