如const int &ival 首先如果它只是const非引用形参那么实参是否为const对它没有影响,因为只是传递副本。而当它为非const引用形参,那么它是实参的别名,对它的修改也就是对实参本身的修改,,而当它为const 引用形参 那么将会修改实参的值 而他本身不会修改?那么引用是实参的别名而后加了个const 也就是说别名不会被修改 就是说ival的不会被修改 请问下这是为什么呢?为什么要这样 这样的意义何在?
void fun(const int ival){ ival = 3; // 编译错误, 无法修改一个const对象. } void fun(const int& ival){ // 引用参数 ival = 3; // 编译错误, 无法修改一个const对象. } 也就是说, 只要对象的声明中带有const标识, 任何有修改其值风险的行为编译器都会提醒你.. const T& 和const T的意义几乎是完全一样的. 但是后者, LZ也知道是要复制一份的, 对于某些巨型类来说复制的速度非常慢, 而且也会有些类型在设计上拒绝复制(比如说cin和cout). 这种时候为了提升效率, 就需要引用参数, 或者指针了. 如果有修改参数值的必要, 就用一般引用, 表示 "我这个函数有可能会修改你传递过来的参数" 如果仅仅读取参数值, 那么就用const引用, 表示 "我这个函数绝对不会修改你传递过来的参数" 但是, 对于int这样的小型的内置类型来说, 这2这几乎就真的没有差别了, 对于引用通常需要地址来传递, int类型占据的内存和地址一样或者更小(64位机器指针是64位大小)