代码改变世界

C++笔记

2017-06-02 09:15  sinohenu  阅读(135)  评论(0)    收藏  举报

1. 常量引用

int a = 10;

int& p1 = a;//正确

int& p2 = 2;//错误,需要引用左值

const int& p3 = a;//正确

const int& p4 = 4;//正确

关于引用的初始化有两点值得注意:

1)当初始化值是一个左值(可以取得地址)时,没有任何问题,可以用常量引用也可以用非常量引用, 如p1,p3;

2)当初始化值不是一个左值时,则只能对一个const T&(常量引用)赋值。如p4。而且这个赋值是有一个过程的:

首先将值隐式转换到类型T,然后将这个转换结果存放在一个临时对象里,最后用这个临时对象来初始化这个引用变量。

如果是对一个常量进行引用,则编译器首先建立一个临时变量,然后将该常量的值置入临时变量中,对该引用的操作就是对该临时变量的操作。对常量的引用可以用其它任何引用来初始化;但不能改变。

2. 常量函数可以被任何对象调用,而非常量函数则只能被非常量对象调用,不能被常量对象调用;

3. 在类中允许存在同名的常量函数和非常量函数,编译器根据调用该函数的对象选择合适的函数
    当非常量对象调用该函数时,先调用非常量函数;
    当常量对象调用该函数时,只能调用常量函数;
    如果在类中只有常量函数而没有与其同名的非常量函数,则非常量与常量对象都可调用该常量函数;

2和3:只要记住任何能改变常量对象的操作都不被允许