与 C++ auto 关键字作用类似的关键字 / 语法
与 C++auto关键字作用类似的关键字 / 语法
核心共同点:编译期自动类型推导、不用手写具体类型
1.decltype
- 作用:推导一个表达式的类型
- 和 auto 区别:
auto是定义变量时自动推类型decltype(表达式)是单独拿表达式算出类型,可用于变量、函数返回值、模板
- 示例:
cpp
运行
int a = 10; decltype(a) b = 20; // 推导为 int- 常和
auto搭配:auto decltype(auto)精准保留引用、const 属性
2.decltype(auto)
- C++14 新增
- 既能像 auto 自动推导,又完整保留引用、const、左值 / 右值属性
- 解决普通 auto 会丢失引用、顶层 const的问题,常用于函数返回值推导
3.typename/class(模板类型参数)
- 作用:告诉编译器后面是一个类型,让编译器自动推演模板实参
- 模板本质也是编译期类型推导,和 auto 底层同源
cpp
运行
template<typename T> // class 等价于 typename void func(T t);4.using类型别名(替代typedef)
- 可以配合 auto/decltype 做类型简化、别名推导
cpp
运行
using MyType = decltype(10.5);- 虽不是自动推导变量,但属于编译期类型重定义、简化长类型,使用场景和 auto 高度互补
5. C++11 范围 for 循环(隐含 auto)
cpp
运行
for (auto x : vec) {}语法层面等价隐式类型推导,本质还是 auto 机制
6.constexpr/consteval(附带类型推导特性)
- 编译期常量求值,常量类型可隐式推导
- 侧重编译期计算,同时具备类型自动推演能力
按相似度分级
最像 auto(同属编译期类型推导)
- decltype
- decltype(auto)
原理相近(模板类型推演体系)
- typename / class
场景互补(简化长类型、替代手写类型)
- using
一句话总结
- decltype、decltype(auto)是和 auto 同源、底层都是模板类型推导,最相似;
- typename/class是模板层面的类型推导根基;
- using是配合 auto 简化复杂长类型的常用语法。
