"C++ Primer 读书笔记" 第二章 变量与基本类型

1.1.2 初识IO对象

表达式

cout << "hello" << endl;

中, cout为标准输入输出库<iostream>中的ostream类的一个对象。此处的操作数,操作符,操纵符等概念要明白。endl操纵符传给cout对象,使得设备缓冲区被刷新。

2. 变量和基本类型 - 2.3变量

  了解C++中的基本内置类型(bool, int, float, double, char, long int等)及其存储空间;

  整型与浮点型各自包含了哪些算术类型。

  通常建议int32计算整型,double计算浮点运算。

  只有内置类型存在字面值常量,如 true, 42, 3.1415926, "hello", 'x' .

  以0开头的字面值常量表示8进制,0x则是16进制。以L结尾的表示long类型,U表示unsigned类型。

  字面值为右值,不能出现在赋值语句的左边。

  初始化、赋值、声明、定义的概念:

    变量的定义:(必须)要有变量的类型和标识符,(可选)同时可以指定初始值;定义的同时为变量分配内存,如果没有指定初始值,将由系统进行初始化。

    变量的声明:定义是声明的一种,还有另一种extern声明,不分配存储空间,只是说明变量定义在程序的其他地方。

    注意:

  • 函数内部定义的变量没有初始化值,函数外部定义的变量才有初始化值;
  • 程序中变量可以声明多次,但只可以定义一次;  
  • extern声明在同时初始化时也是定义,但只能在函数外部才能如此;
  • 多个文件共用一个变量,则有且仅有一个文件包含变量的定义,其他文件包含该变量的声明。

   变量的作用域:全局作用域(函数外部定义的变量)、局部作用域(函数内部定义的)与语句作用域(如for语句中定义的)。不同作用范围的作用域可嵌套。(更复杂的还有类的作用域和命名空间作用域。)

  2.4 const限定符

  const对象用于表示常数:定义之后不能被修改;在定义时就需要被初始化。

  如果非const变量在全局作用域中被定义,则在整个程序中都可以访问(默认为extern);

  但const变量必须加extern关键字时,才能在整个程序中访问。否则只能在当前文件中被访问。

  2.5 引用

  无非就是某个对象的另一个名字!完全是相同的内存。

  const 引用:可以读取但不能修改。

  因此我们使用const引用作函数形参:

  引用不必将实参再拷贝一次,节省了内存空间;而加const则保护了实参的值不被修改(如果要同时修改则不加const关键字)。需要注意的是,const int &a; 是指向const变量的引用(const int) &a; 而不是说这个引用本身是const的。在Python中,参数传递采用的是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个不可变对象(数字、字符或元组)的引用,就不能直接修改原始对象--相当于通过‘值传递’来传递对象。如果函数收到的是一个可变对象(字典、列表)的引用,就能修改对象的原始值--相当于‘传引用’来传递对象。

 

  2.6 typedef 用于定义类型的同义词(通常是便于程序员使用)

    struct   Student   
    {   
    int   a;   
    }stu1;//stu1是一个变量  

       typedef   struct   Student2   
    {   
    int   a;   
    }stu2, *stu_p;//stu2是一个结构体类型 = struct Student     
    // *stu_p 是指向结构体的指针

  枚举

  enum modes {open, close, disabled};

  modes m = open;

  关于类类型

  花括号后要加分号 ; ;

  类本身定义了其作用域;

  注意,所有数据成员的初始化应该在构造函数中实现;

  访问标号 public表示程序的任何部分可以访问,private表示只有在类内部的代码可以访问,

  操作private内部的数据应通过成员;

  使用struct关键字定义类:class关键字定义的类的成员缺省为private,struct则是public;

  头文件中只声明不定义,除了类和const对象:

  在头文件中我们不定义变量,如 int a; 主要是用来定义类;

  另外,const变量默认是定义该变量的文件的局部变量,因此在头文件中定义并不会导致重复定义;而其他包含了这个.h文件的源文件都有相同的const变量;

  const变量如果用常量表达式进行初始化,如 const float a  = 1 + 2.1415926;

  const float b = a+1;

  1. 在编译阶段就能够计算出结果

  2. 由于用常量表达式(通常是字面值)代替了const变量的使用,因此不占用任何存储空间(?变量、const变量、函数内部变量、字面值都保存在内存哪些位置?)

  预处理器:利用预处理器变量(条件编译宏)避免多重包含

  C++是一种静态类型语言,所有函数和变量必须在访问前声明或定义;

 

 

  

  

上一篇:c++primer练习12.6


下一篇:C++ Primer 函数传参