《C++ Prime》第2章 阅读笔记

(2018/01/29 20:23)
  • C++基本数据类型分为 算术类型 空类型,算数类型又分为 整型(包括字符布尔类型在内) 浮点型
  • 字由4字节或8字节组成。
  • 如何选择数据类型:
    • 当明确知道熟知不可能为负时,选择无符号类型;
    • 使用int执行整数运算;
    • 在算术表达式中不要使用char或bool;
    • 执行浮点数运算时选用double,因为float精度不够且两者的计算代价相差无几。
  • 当一个算术表达式中既有无符号数又有int值时,int值会转换成为无符号数。






  • 如果表达式里既有带符号类型又有无符号类型,当带符号类型取值为负时会出现异常结果(带符号数会自动转换为无符号数)。
  • 以0开头的整数代表八进制数。
  • 字面值类型:
    • 十进制字面值的类型是能容纳其数值的int、long和long long中尺寸最小的那个;
    • 八进制和十六进制字面值的类型是能容纳其数值的int、unsigned int、long、unsigned long、long long和unsigned long long中
    • 尺寸最小的那个;
    • 类型short没有对应的字面值;
    • 默认的,浮点型字面值是一个double;
    • “Hello” “World”位置紧邻仅由空格、缩进和换行符分割的两个字符串,在他们实际上一个整体的字符串。
  • (C++11)列表初始化:int a = {3.14}; (用花括号括起来)
相比于int a(3.14)和int a 3.14; 当用于内置类型时,如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器会报错。
  • 定义于任何函数之外的内置类型的变量,若未被显示初始化,其会被自动初始化为0;
定义在函数体内部的内置类型变量将不被自动初始化。
  • C++支持分离式编译机制,该机制允许将程序分割为多个文件,每个文件可被独立编译。
  • C++是一种静态类型语言,其含义是在编译阶段检查类型。此过程称为类型检查
  • 变量名命名规范
    • 用户自定义的标识符中不能两虚出现两个下划线,不能以下划线紧接大写字母开都。此外,定义在函数体外的标识符不能以
下划线开头。=》自定义标识符不以下划线开头;
    • 变量名一般用小写字母,对于多单词,采用头分法,studentLoan;
    • 自定义的类名一般以大写字母开头。
  • 函数内部不宜定义与全局变量同名的新变量,在函数作用域内,局部变量会同名覆盖全局变量。
    • 函数内部可以显示访问同名全局变量,使用 ::name
  • 引用:
    • 给变量起别名;
    • 引用必须被初始化;
    • 引用的类型要和与之绑定的对象严格匹配;
    • 对const的引用,前面要加const;const int a; const int &b = a。
  • 指针:
    • NULL == 0; (C++11)最好用nullptr来初始化指针,nullptr可以被转化为u任意其他指针类型;
    • 注意野指针;
    • 任何非0指针对应的条件值都是true;
    • 以void*的视角来看内存据仅仅是内存空间,没法访问内存空间中所存的对象。
  • 理解复合声明:右左法则
    • int *p1, p2; //p1是指针,p2是int;
    • int *&r = p; //r是对 int*型指针p 的引用。
  • const限定符:
    • const对象仅在当前文件内有效,多个文件中同名的const变量,其实等同于不同文件分别定义的独立变量;
    • 如果想在多个文件间共享const对象,必须在变量的定义和声明前都加extern关键字;
    • 对const的引用,前面要加const;const int a; const int &b = a。
    • 指针和const:
      • const int *p = &a;//指向const int a的指针p;
      • int *const p = &a;//指向int a的常指针const p
    • 顶层const和底层const:
      • (这部分自行看C++ Prime)
      • 当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格
  • constexpr和表达式:
    • 声明为constexpr的变量是一个常量,而且必须用常量表达式初始化。
  • 指针和constexpr:
    • 在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,与指针指向的对象无关。
      • const int *p = nullptr; //p是一个指向整型常量的指针
      • constexpr int *q = nullptr; //q是一个指向整数的常量指针
  • 类型别名:
    • typedef int Base; //base是int的近义词
    • C++11中的别名声明:using Base = int;
  • auto类型说明符:(C++11)
    • auto定义的变量必须有初始值;
    • auto在一条语句中声明多个变量,因为一条语句只能有一个基本数据类型,所以该语句中所有变量的初始基本数据类型相
同。
  • auto i = 0, *p = &i; //正确:i是整数、p是整形指针
  • auto sz =0, pi = 3.14; //错误:sz和pi的类型不一致
  • int i = 0, &r = i;
auto a = r; //a是一个整数
auto a = &i; //a是一个整形指针
  • auto自动忽略顶层const
const int ci = i;
auto b = i; //b是一个int(忽略顶层const)
  • decltype类型指示符:(C++11)
    • decltype可以在不初始化变量的前提下推断出表达式的类型;decltype(f1()) a;
    • decltype返回该变量的类型(包括顶层const和引用在内);
    • 引用从来都作为其所指对象的同义词出现,只有用在decltype处是一个例外。
    • decltype((变量))的结果永远是引用
  • 类体由花括号包围形成了一个新的作用域
  • 预处理概述
    • #include是一项预处理功能,预处理器头文件内容替换#include;
    • 用头文件保护符(#ifdef #ifndef #endif)有效防止头文件重复包含造成的重定义。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值