C++“磨人“的词汇

学习目标:

C++,从名字可以看出是C的升级版,所以C里有的词汇它都有,我们认识以下C++独有的词汇。
想看C语言中的"磨人词汇",请看下面这个博文

C语言中的"磨人"词汇

学习内容:

  • 引用 : 如示例所示 int &a = b;,这跟C语言中的可不一样,这个&它是在=号左边出现的,所以跟C中的不一样,它表示 把a定义为变量b的别名,看例子。
int a = 10;
int &a1 = a;
a1 = 30;
cout<<a<<endl;

输出结果 :

30

结果分析 :
可以看到我们修改变量a1的之,a却也发生了变化,这就很神奇。

使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数,引用的出现则解决了这个问题,即在内存中并没有产生实参的副本,它是直接对实参操作

  • 常量引用 : 值不能变
int a = 10;
const int &a1 = a;
//报错,不能修改值
//a1 = 2;
//&a1 = b;

当了解了引用的作用了,我们这就来使用,不过要注意,当我的函数返回值是个引用的时候,不能返回局部变量的引用,看下面你的例子就懂了

int &add(int a,int b){
    int sum = a+b;
    return sum;
}

int main() {
    int sum1 = add(10,20);
    cout<<sum1<<endl;
    return 0;
}

这段代码就直接报错,不讲道理,为什么呢?因为当我们调用函数的时候,这时候就开始压栈,add函数压栈,执行完 返回了一个局部变量的引用,然后这个函数就出栈了,你觉得我们add函数里的局部变量sum变量还在嘛?当然不在,然后当你使用这个返回值的时候,就肯定挂掉了,那咋办?唯一办法,不然它回收,让它生命周期长一点 就可以了

//全局变量sum
int sum; 
int &add(int a,int b){
    sum = a+b;
    return sum;
}

int main() {
    int sum1 = add(10,20);
    cout<<sum1<<endl;
    return 0;
}

输出结果:

30

小练习

int array[10];
int error = -1;

int &get(int index) {
    if (index >= 0 && index < 10){
        return array[index];
    }
    cout<<"index out of length!";
    return error;
}

int main() {
    get(5) = 30;
    cout << get(5) << endl;
    return 0;
}

代码解释: 以上代码就是对数组的下标为5的元素赋值30,这个花里胡哨,其实你可以直接array[5] = 30,权当练手。

  • 常函数 : 函数括号后面加了const,在这种函数体内不能修改成员变量
int ArrayList<T>::getLength() const{
    //非法语句 长函数内不能修改成员变量
    //this->size = 10;
    return 0;
}

但是假如你非要修改的话呢,你就要把当前需要修改的成员变量添加修饰符mutable,这样这个变量就能在长函数内被修改了

mutable int size = 0;
  • 常对象 :这个跟常函数一样,你不能修改这个对象内的任何成员变量。你想要改的话,也需要像长函数一样,给对应的成员变量添加修饰mutable
const Person p;
//非法修改
//p.age = 10;

持续更新中。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值