C++设计语言(第四版)读书笔记(4)第6章

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YuYunTan/article/details/84678711

  1、C++具体实现分宿主式和独立式。

  2、数值类型转换成逻辑类型,0为false,非0为true。指针也可以隐式转换,非空指针为true,nullptr为false。

  3、char是8字节所容纳的256个值,可看成0~255,或-127~127,而不是-128~127。因为c++标准支持使用补码的硬件设备,而补码会排除掉一个值,-128不容易移植。

  4、strcmp()只能接受普通char。

  5、转义字符

  6、精细控制整数的尺寸,使用 <cstdint>中定义的别名,int64_t(明确占用64位的带符号整数),uint_fast16_t(至少占用16位的无符号整数,最快整数)和int_least32_t(至少占用32位的带符号整数)等。

  7、通常情况下,整数字面值常量类型由它的形式、取值和后缀共同决定:

  8、前后缀限定字面值常量的类型,下表的“字符串”指“字符串字面值常量”而非数据类型"std::string"

  9、后缀l和L可以与u和U结合使用,表达unsigned long,同样后缀l和L也能用于表示浮点数表示字面值常量类型,lond double。

  10、void作用:作为函数返回类型说明函数实际不返回任何实际的值;作为指针的基本类型部分表明指针所指对象的类型未知【声明指针时】。

  11、C++基本类型尺寸规定:

  最后一行的N可以是char、short、int、long或long long。

  12、如果某个值v能用T类型的变量确切表达,则把v的类型转换成T是值保护的。最好避免使用那些做不到值保护的类型转换。

  13、alignof()运算符返回实参表达式对齐的情况。有时需在声明语句中对齐,但不允许形如alignof(x+y)的表达式免责使用类型说明符alignas:alignas(T),含义是“像T那样对齐”。

  14、每个名字可以对应多个声明,但只能一个定义

  15、一条声明语句(依次)包含5个部分:

  16、修饰符是指声明语句最开始的关键字,如virtual,extern和constexpr等,作用是指定所声明对象的某些非类型属性。

  常见声明运算符

  声明语句不允许省略数据类型。

17、关键字表

  18、块内声明的名字能隐藏外层块及全局作用域中的同名声明。可用作用域解析符::访问被隐藏的全局名字。

  19、列表初始化可防止窄化转换,即:

  • 如果一种整型存不下另一种整型的值,则后者不会被转换为前者。例char到int,不允许int到char转换。
  • 一种浮点型存不下另一种浮点型的值,则后者不会被转换为前者。例如float到double,但不能double到float
  • 浮点型不能转换成整型
  • 整型不能转换为浮点型

  20、使用auto和初始化器,应该选择=的初始化形式,不然造成推断不是想要结果。

auto z1 {99};//类型initializer_list<int>
auto z2 = 99;//类型int

  21、除非用充分理由,否则最好使用{}初始化。空{}初始化表示默认值初始化。

  22、除非确定未初始化缓冲区远优于初始化缓冲区,否则不要轻易让缓冲区处于未初始化状态。

  23、不指定初始化器,全局变量、名字空间变量和局部static变量和static成员将会执行相应数据类型的列表{}初始化[静态对象]。局部变量和自由存储上的对象[堆或动态对象],除非位于用户自定义类型的默认构造函数中,否则不会执行默认初始化。对内置类型的局部变量或者用new 创建的内置类型的对象执行初始化,用{}。

  24、C++推断类型机制:

  • auto,根据对象的初始化器推断对象的数据类型,可能是变量、const或者constexpr的类型
  • decltype(expr)推断的对象不是一个简单的初始化器,有可能是函数的返回值类型或者类成员类型。

  25、表达式类型永远不会是引用类型,因为表达式会隐式地执行解引用操作。

void g(int &v){
    auto x = v;//x类型为int
    auto& y = v;// y的类型是int&
}

  26、既想推断得到类型,又不想在此过程中定义一个初始化变量应使用声明类型修饰符decltype(expr)。推断所得的结果是expr的声明类型。

  27、对象是指一块连续存储区域,左值是指想对象的一条表达式。“左值”的字面意思是“能用在赋值运算符左侧的对象”,但并非所用左值都能用在赋值运算符的左侧,左值也有可能指示某个常量。

  28、未被声明成const的左值称为可修改的左值。

  29、右值是指“不能作为左值的值”,例函数返回值一样的临时值。

  30、后缀_t表示类型别名。不允许在类型别名前加修饰符。

猜你喜欢

转载自blog.csdn.net/YuYunTan/article/details/84678711