c++ primer 笔记第二章变量和基本类型(二)
2.4 const限定符
const定义的变量不能改变,因此const变量必须初始化。可以使用表达式初始化。
默认状态下const对象仅在文件内有效。
可以在声明和定义都加extern。
练习2.26 (a) 不合法,未初始化 (b) 合法 (c) 合法 (d) 不合法,不能改变const的值。
2.4.1 const的引用
引用绑定到常量上,成为对常量的引用,简称常量引用。
初始化常量引用时可以使用任意表达式,可以不匹配类型。
对常量的引用不要求被引用的对象必须是常量。
2.4.2 指针和const
指向常量的指针,const double pi = 3.14; const double *cptr = π。
指向常量的指针可以指向非常量。
常量指针必须初始化。const double * const p = π
练习2.27(a) 不合法,引用不能绑定字面量。 (b) 合法 (c) 合法 (d) 合法 (e) 合法 (f) 不合法,未初始化 (g) 合法
练习2.28 (a) 不合法 i是整数对象 cp是指向整型的常量指针 cp未初始化 (b) 不合法 p2未初始化 (c) 不合法 ic未初始化
(d) 不合法 未初始化 (e) 合法 p是指向常整型的指针
练习2.29 (a) 合法 (b) 不合法 int*指针不能指向const int (c)同b (d)不合法 常量指针不能改变地址 (e) 常量指针不能赋值 (f) const int 不能赋值
2.4.3 顶层const
顶层const是指指针本身的值不能变,底层const指指针指向的对象是常量。
执行拷贝时,顶层const被忽略,底层const需要考虑。
练习2.30 顶层 无 无 无 底层 顶层加底层 底层
2.4.4 constexpr和常量表达式
常量表达式指不会改变且编译时得到结果的表达式。如字面值。
constexpr变量,由编译器验证变量是否为常量表达式。使用字面值类型。
constexpr设置指针为顶层const。
练习2.32 不合法 constexpr int null = 0, *p = null;
2.5 处理类型
2.5.1 类型别名
typedef 使用关键字进行定义,如 typedef double wages; typedef wages base,*p;
using SI = Sales_item;别名声明。
符合类型的别名声明容易出错。
2.5.2 auto类型说明符
auto 自动推断语句中的变量类型。因此auto变量需要初始值。
auto声明多个变量,变量类型需要相同。
auto忽略顶层const,保留底层const。加const保留顶层const。
练习2.33 TTTFFF
练习2.35 j:int k:const int & p:const int * j2:const int k2:const int&
2.5.3 decltype类型指示符
decltype判断表达式的结果类型,如decltype(f()) sum = x;
decltype对解引用操作得到引用类型。变量加括号当作表达式,返回引用类型。
练习2.36 c int 3 d int& 指向a c 4 a 4
练习2.37 c int d int& 指向a
练习2.38 int a = 3; auto b = a; decltype(a) c = b;
const int a = 3; auto b = a; decltype(a) c = b;
2.6 自定义数据结构
2.6.1 定义Sales_data 类型
类内初始值与默认初始化。
练习2.39 visual studio 2013 无提示
练习2.40
struct Sales_data {
std::string bookNo;
unsigned units_sold = 0;
double price = 0;
}
2.6.2 使用Sales_data类
练习2.41 略
2.6.3 编写自己头文件
类通常定义在头文件种,类所在头文件名字应与类相同。
头文件保护符 #ifndef xxx #define xxx #endif
上一篇: c++ primer 笔记第三章字符串、向量和数组(二)
下一篇: mac 电脑配置cordova