C++新的类型说明符
基于C++ primer第二章的总结
const限定符
-
顶层const : 指针本身是个常量
- int* const 指针的指向不能改变 值可以改变
-
底层const : 指针所指向的对象是个常量
- const int* 指针的值不能改变 指针的指向可以改变
constexpr和常量表达式
由编译器来验证它所修饰的变量是否是一个常量表达式
-
声明为constexpr 的变量一定是一个常量
-
constexpr指针的初始值必须是nullptr或者是0,或者是存储与某个固定地址的对象(全局变量或static静态变量
#include <iostream> using namespace std; extern int a; int b = 100; int main() { static int w = 10; constexpr int* q = nullptr; constexpr int* p = &w; //静态变量 constexpr int* p = &b; //全局变量 *p = 99; return 0; }
- constexpr函数
- 函数的类型和形参必须都是字面值类型
- 必须只有一条return语句
- 通常constexpr函数和inline函数放在头文件中
constexpr int new_sz() { return 42; } constexpr size_t scale(size_t cbt) { //返回常量表达式 return new_sz*cnt; }
类型别名
-
typedef
typedef double My_Dou; typedef My_Dou My_DouDou; -
using
using My_int = int; using My_int_int = My_int; -
当某个类型别名是复合类型时,千万不要将其按部就班拆开读
#include <iostream> using namespace std; typedef char* My_pstr; int main() { const My_pstr* str = nullptr; //正确理解: 指向char的常量指针 const My_pstr str = nullptr; //错误理解: 指向const char的指针 const char* str = nullptr; return 0; }
auto类型说明符
-
自动推断类型 必须要有初始值
-
若非const auto声明 则auto默认忽略顶层const的作用 保留底层const
#include <iostream> using namespace std; int main() { //auto const int a = 5; //忽略a的顶层const的特性 auto num1 = a; //相当于 int //保持a的顶层const特性 const auto num2 = a; //相当于const int //auto& x = 42; 错误 不能为非常量引用绑定字面值 //可以为常量引用绑定字面值 const auto& x = 42; const int i = 42; auto j = i; // int const auto& k = i; // const int& const auto &k2 = i; // const int& auto* p = &i; // const int* const auto* p1 = &i; // const int* const auto j2 = i; // const int return 0; }
decltype指示符
-
选择并且返回操作数的数据类型 但是并不计算表达式的值,只是推断出其类型
const int j = 10; const int& cj = j; decltype(j) a = 0; // a:const int decltype(cj) b = a; // b: const int& //decltype(cj) c; 引用必须初始化 int num = 5; int* p = # int& q = num; decltype(num) x1; //int decltype((num)) x2; //加内层括号变为引用 decltype((num=num1)) x; //赋值也会变为引用类型 decltype(q + num) x3; //int decltype(*p) x4; //int &
本文来自博客园,作者:hugeYlh,转载请注明原文链接:https://www.cnblogs.com/helloylh/p/17209756.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通