欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++ primer 笔记第二章变量和基本类型(二)

程序员文章站 2024-03-21 14:45:04
...

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