C++ Primer 5th笔记(2)chapter 2变量和基本类型:constexpr 、auto、类型别名、decltype
1.constexpr和常量表达式
1.1 常量表达式
定义:变量的值在编译器的时候就可以得到是一个常量
eg. const int i = 0;
1.2 constexpr变量
让编译器来验证变量的值是否是一个常量表达式。
eg.
constexpr int mf =20;
constexpr int mf2 = size();//size()得是一个constexpr函数
1.3 字面值类型 literay type
一个constexpr 指针的初值是nullptr或者一个固定地址。
const int* p= nullptr;
constexpr int* q= nullptr; //等价于 int* const q= nullptr;
2 类型处理
2.1 类型别名type alias
2.1.1
typedef double w; //数据类型的别名
w f1;//等价于 double f1;
using SI= Sales_item;//类的别名
SI obj;//等价于 Sales_item obj;
2.2.2 指针
typedef char *pstring;
const pstring cstr = 0;//cstr是指向char的常量指针不是const char* cstr1;//cstr1则表示指向常量char的指针
3 auto
定义:不知道变量的类型,直接用auto声明
3.1 auto会忽略顶层const
const int ci = i;
auto b = ci;
auto e = &ci;// e是一个指向整数常量的指针
如果希望b是顶层const,则const auto f = ci;
3.2 引用可以用于auto
eg.
auto &g = ci;
const auto &j = 0;
3.3 多个变量
初始值类型得一致
eg.
auto &k = ci, *p = &ci;//ok
auto &n = i, *p2 = &ci;//error
4. decltype类型
定义:希望从表达式的类型推断出变量的类型,但又不想赋初值
eg.
decltype(f()) sum =x; // sum的类型就是f()函数的返回值,f()并不调用
const int ci = 0, &cj = ci;
decltype(ci ) x = 0; // x是const int
decltype(cj ) x = 0; // x是const int&
decltype(cj ) x;//error
4.1 decltype和引用
decltype的括号里面可以是一个表达式结果
eg.
int i = 42, *p =&i;
decltype(i +9 ) x;
decltype(*p) x;//error:x是int&(解引用规则)
decltype如果嵌套(),那么一定返回引用
decltype((i)) d;
5. 类内初始值
class Sales_item { unsigned units_sold = 0; double revenue = 0.0;
}
6.头文件保护
eg.
#ifndef SALESITEM_H
#define SALESITEM_H
#endif
参考
[1]: 代码 https://github.com/thefistlei/cplusprimer/tree/main/cprimer
C++ Primer 5th笔记(2)chapter 2变量和基本类型:constexpr 、auto、类型别名、decltype相关推荐
- C++ Primer 5th笔记(chap 19 特殊工具与技术)运行时类型识別RTTI
1. 运行时类型识别(run-time type identification ) 当我们将这两个运算符用于某种类型的指针或引用, 并且该类型含有虚函数时, 运算符将 使用指针或引用所绑定对象的动态类 ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型
1. 提取 bitset 的值 函数返回一个值,保存了与bitset 对象相同的位模式. to_ulong() // 返回unsigned long to_ullong() //返回unsigned ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 类型
1. 定义 将一些数据组合成单一对象(类似pair) tuple支持的操作 操作 解释 tuple<T1, T2, -, Tn> t; t是一个tuple,成员数为n,第i个成员的类型是T ...
- c++ primer 5th 笔记:第二章
第二章:变量和基本类型 笔记: 1. c++语言规定一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大.其中,数据类型long l ...
- C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员
1. 3种方法 using 声明 命名空间的别名( namespace alias) using 指示( using directive) 1.1 命名空间的别名 namespace cplusplu ...
- C++ Primer 5th笔记(chap 19 特殊工具与技术)成员函数指针
1. 使用 classname::*的形式声明一个指向成员函数的指针. eg. / / pmf 是一个指针, 它可以指向 Screen 的某个常量成员函数 / / 前提是该函数不接受任何实参, 并且返 ...
- C++ Primer 5th笔记(chap 19 特殊工具与技术)枚举类型
1. 枚举类型(enumeration) 将一组整型常量组织在一起. 1.1 限定作用域 的 枚 举 类 型( scoped enumeration) 关 键 字 enum class ( enum ...
- C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参
1. 类型参数可以使用任何名字(通常命名为 T) template <typename Foo> Foo calc (const Foo& a, const Foo& b) ...
- C++ Primer 5th笔记(chap 15 OOP)概述
面向对象程序设计的核心思想: 数据抽象:将类的接口与实现分类. 继承:可以定义相似的类型并对其相似关系建模. 动态绑定:我们能用同一段代码分别处理不同的对象.相同函数,根据动态绑定的对象实质进行区别. ...
- C++ Primer 5th笔记(10)chapter10 泛型算法 :lambda
1. 定义 lambda表达式表示一个可调用的代码单元. 一个lambda具有捕获列表.参数列表,返回类型,函数体: [capture list](parameter list)->return ...
最新文章
- R语言logistic回归、判别分析(LDA)、多元自适应样条回归MARS分析案例:分析乳腺癌数据集明确细针穿刺肿瘤活检结果
- [实验]通过内核Patch去掉iOS-v4.3.3的沙盒特性
- Linux基础学习笔记-第五课:文件权限
- python实验过程心得体会_20192416 实验四《Python程序设计》综合实践报告
- Eureke服务入门就这一篇就够了
- 信号signal()、alarm()、信号集函数、sigprocmask()
- 如何把一个bin文件捆绑到一个可执行文件exe中?
- Double类型比较大小
- PowerBuilder DataWindow 38个开发技巧
- c语言银行卡六位密码编译,用c语言生成六位的随机密码。
- 软件测试和调试的区别
- Pycharm 更换皮肤和壁纸
- linux .sh文件详解,sh命令(sh命令详解)
- 【项目实战课】基于Pytorch的InceptionNet花卉图像分类实战
- 计算机基础实训项目二 Word 综合应用,计算机应用基础-实训项目二 Word 综合应用[优质文档]...
- HDFS java接口——实现目录增删文件读写
- 绝望的主妇第一二三季/Desperate Housewives迅雷下载
- Python对批量文件进行VAD检测和分段
- Mysql :Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
- FTTB MDU7353
热门文章
- 三星s9没有推送android10,2月14日 三星Galaxy S9/S9+开始推送Android 9.0正式版
- 公司访问实录 | 数据中心的运维难题知多少
- 民生银行马坡数据中心基础设施Uptime Mamp;O运营管理体系建立与实施
- 不要把为师我说出来就不错了
- “春色满园”!谷歌新数据中心有望实现100%可再生能源
- 数据中心业务价值永续的密码——施耐德电气全生命周期服务
- 市电中断时,数据中心机房如何保证持续供电?
- MyEclipse2017:MyEclipse2017软件破解图文教程(解决MyEclipse软件因试用期过期而无法再次使用的问题)
- ML之分类预测之ElasticNet:利用ElasticNet回归对二分类数据集构建二分类器(DIY交叉验证+分类的两种度量PK)
- 成功解决 threading Exception unhandled RuntimeError