C++ primer 读书笔记

 2量和基本

 

1量直接初始化和制初始化

      int  ival(1024);                         //direct-initialization

      int  ival = 1024;                       //copy-initialization

    初始化不是赋值

2、内置制初始化和直接初始化几乎没有区;但对类类象来,有些初始化只能用直接初始化完成。

3、未初始化,系会自初始化。

     内置量在函数外定义时被系初始化0,在函数体内行初始化,建议每个内置象都要初始化(是个好的习惯)。;类类型用构造函数行初始化,大部分类类型具有默构造函数,可以为对式初始化,有些类类型没有默构造函数,个定须显式提供初始化式,否根本不能定义该类量。

4量的声明和定

      一次定多次声明。

      为变量分配内存存可以。在一个程序中有且有一次定

      声明,定也是声明,可以只声明不定,即用使用关键字:externextern 声明不是定,没有分配内存空,事上,他只量定在程序的其他地方。

      如果声明有初始化式,那它可被当成定,即使声明标记为extern:

        extern int ival = 3; //definition

      注意:只有extern声明在函数外才能含有初始化式。

      通常把一个象的定在首次使用之前是一个很好的方法(个人认为,在大型程序中这样会使程序看起来凌乱)。

6const限定符

    常量定后就不能修改,所以定义时初始化。

    const std::string hi = "hello world";  //ok initialized

    const int i, j = 5; //error :i is uninitialized const

 

    const象默认为文件的局部量。

    //file_1.cc

    int counter; //define

    //file_2.cc

    extern int counter; //use counter form file_1.cc

    counter++;

 

    //file_1.cc

    extern const int bufSize = 512; //define

    //file_2.cc

    extern const int bufSize ; //use bufSize form file_1.cc

    bufSize ++;

 

    const量默认为extern.要使const量能在其他文件中访问,必须显示指定它extern.

5、引用(reference

     实际应用中引用主要用做函数的形式参数。不能定义引用类型的引用,但能定义其他任何类型的引用。当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。不可能将引用绑定到另一个对象上。引用仅仅是对象的另一个名字。

 

    引用必须用和该引用同类型的对象进行初始化。例如下:

    Int ival = 1024;

    Int &refVal = ival; //ok:refVal refer to ival

    Int &refVal2; //error:a reference must be initialized

    Int &refVal3 = 10;//error:initializer must be an object

 

    Const 引用时指向const对象的引用

    Const int ival = 1024;

    Const int &refVal = ival;//ok:both reference and object are const

    Int ref2 = ival;//error:nonconst reference refer to a const object

 

    const引用只能绑定到与该引用相同类型的对象

    const引用则可以绑定到不同但相关类型的对象或右值(如:42)。

    Int ival =42;;

    Const int &r = 42;//legal 但是非const引用就不合法。

    Const int &r2 = r + ival;//legal

之所以const引用可以绑定到不同但相关类型的对象上,是因为存在类型的隐式转换,如:

Double dval = 3.14;

Const int &ri = dval;

编译器会把代码改编成如下形式:

    Int temp = dval;

    Const int &ri =temp;//ri其实绑定的是临时变量。

 

7、类类型

    除了class关键字外还可以用struct关键字定义类。两者的唯一区别在于默认访问级别不同:struct成员为public,class的成员为private,即定义在第一个访问标号(privatepublic)前的成员都隐式的定义为默认级别。

 8、编写自己的头文件

    因为头文件包含在多个源文件中,所以不能含有函数和变量定义。但有三个例外,头文件可以定义类,值在编译时就已经知道得const对象和inline函数。这些实体可在多个源文件中定义,只要每个源文件中的定义是相同的。

     在头文件中定义是因为编译器需要知道他们的定义来产生代码。如果const变量不是用常量表达式初始化,那么它就不应该在头文件中定义。当我们在头文件中定义const变量后,每个包含头文件的源文件都有了自己的const变量,其名称和值都一样。当const变量是用常量表达式进行初始化时,可以保证所有的变量都有相同的值。但是在实践中,大部分编译器在编译时都用常量表达式来替换const变量的使用。所以在实践中不会有任何存储空间用于存储用常量表达式进行初始化的const变量。

    使用与处理器变量避免多重包含。

    #ifndef   SALESITEM_H

    #define   SALESITEM_H

        //

    #endif

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值