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相关推荐

  1. C++ Primer 5th笔记(chap 19 特殊工具与技术)运行时类型识別RTTI

    1. 运行时类型识别(run-time type identification ) 当我们将这两个运算符用于某种类型的指针或引用, 并且该类型含有虚函数时, 运算符将 使用指针或引用所绑定对象的动态类 ...

  2. C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型

    1. 提取 bitset 的值 函数返回一个值,保存了与bitset 对象相同的位模式. to_ulong() // 返回unsigned long to_ullong() //返回unsigned ...

  3. C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 类型

    1. 定义 将一些数据组合成单一对象(类似pair) tuple支持的操作 操作 解释 tuple<T1, T2, -, Tn> t; t是一个tuple,成员数为n,第i个成员的类型是T ...

  4. c++ primer 5th 笔记:第二章

    第二章:变量和基本类型 笔记: 1. c++语言规定一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大.其中,数据类型long l ...

  5. C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员

    1. 3种方法 using 声明 命名空间的别名( namespace alias) using 指示( using directive) 1.1 命名空间的别名 namespace cplusplu ...

  6. C++ Primer 5th笔记(chap 19 特殊工具与技术)成员函数指针

    1. 使用 classname::*的形式声明一个指向成员函数的指针. eg. / / pmf 是一个指针, 它可以指向 Screen 的某个常量成员函数 / / 前提是该函数不接受任何实参, 并且返 ...

  7. C++ Primer 5th笔记(chap 19 特殊工具与技术)枚举类型

    1. 枚举类型(enumeration) 将一组整型常量组织在一起. 1.1 限定作用域 的 枚 举 类 型( scoped enumeration) 关 键 字 enum class ( enum ...

  8. C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参

    1. 类型参数可以使用任何名字(通常命名为 T) template <typename Foo> Foo calc (const Foo& a, const Foo& b) ...

  9. C++ Primer 5th笔记(chap 15 OOP)概述

    面向对象程序设计的核心思想: 数据抽象:将类的接口与实现分类. 继承:可以定义相似的类型并对其相似关系建模. 动态绑定:我们能用同一段代码分别处理不同的对象.相同函数,根据动态绑定的对象实质进行区别. ...

  10. C++ Primer 5th笔记(10)chapter10 泛型算法 :lambda

    1. 定义 lambda表达式表示一个可调用的代码单元. 一个lambda具有捕获列表.参数列表,返回类型,函数体: [capture list](parameter list)->return ...

最新文章

  1. R语言logistic回归、判别分析(LDA)、多元自适应样条回归MARS分析案例:分析乳腺癌数据集明确细针穿刺肿瘤活检结果
  2. [实验]通过内核Patch去掉iOS-v4.3.3的沙盒特性
  3. Linux基础学习笔记-第五课:文件权限
  4. python实验过程心得体会_20192416 实验四《Python程序设计》综合实践报告
  5. Eureke服务入门就这一篇就够了
  6. 信号signal()、alarm()、信号集函数、sigprocmask()
  7. 如何把一个bin文件捆绑到一个可执行文件exe中?
  8. Double类型比较大小
  9. PowerBuilder DataWindow 38个开发技巧
  10. c语言银行卡六位密码编译,用c语言生成六位的随机密码。
  11. 软件测试和调试的区别
  12. Pycharm 更换皮肤和壁纸
  13. linux .sh文件详解,sh命令(sh命令详解)
  14. 【项目实战课】基于Pytorch的InceptionNet花卉图像分类实战
  15. 计算机基础实训项目二 Word 综合应用,计算机应用基础-实训项目二 Word 综合应用[优质文档]...
  16. HDFS java接口——实现目录增删文件读写
  17. 绝望的主妇第一二三季/Desperate Housewives迅雷下载
  18. Python对批量文件进行VAD检测和分段
  19. Mysql :Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
  20. FTTB MDU7353

热门文章

  1. 三星s9没有推送android10,2月14日 三星Galaxy S9/S9+开始推送Android 9.0正式版
  2. 公司访问实录 | 数据中心的运维难题知多少
  3. 民生银行马坡数据中心基础设施Uptime Mamp;O运营管理体系建立与实施
  4. 不要把为师我说出来就不错了
  5. “春色满园”!谷歌新数据中心有望实现100%可再生能源
  6. 数据中心业务价值永续的密码——施耐德电气全生命周期服务
  7. 市电中断时,数据中心机房如何保证持续供电?
  8. MyEclipse2017:MyEclipse2017软件破解图文教程(解决MyEclipse软件因试用期过期而无法再次使用的问题)
  9. ML之分类预测之ElasticNet:利用ElasticNet回归对二分类数据集构建二分类器(DIY交叉验证+分类的两种度量PK)
  10. 成功解决 threading Exception unhandled RuntimeError