一. explicit、左值右值、函数返回值当作引用

1.explicit

明确的,清楚的

作用是表明构造函数是显示的,而非隐式的,不能进行隐藏式转换。跟他对应的另一个关键字式implicit,意思式隐藏的,类的构造函数默认情况下即声明为implicit。

用这个来避免声明对象的时候产生的歧义。

    explicit Student(int _age)   //必须显示构造
    {
        age = _age;
        cout << "age = " << age << endl;
    }
    Student(int _age, string _name)   //可以隐式构造,也可以显示构造
    {
        age = _age;
		name = _name;
        cout << "age = " << age <<"    ";
        cout << "name = " << name << endl;
    }
    Student A(19, "xiaoming");  //显示构造
    Student B (18);  //显示构造
    
    Student C = 18;       //隐式构造
    Student C = {18, "xiaohong"};  //隐式构造

2.左值,右值的概念

按字面意思就是,以赋值符号 = 为界, = 的左边为左值,右边为右值

左值:代表一个在内存中占有确定位置的对象,就是有一个确切的地址

右值:不是左值的都是右值,一般来说就是不在内存中占有确切位置的表达式,而是在寄存器中(临时的数据)进行运算。

    int a = 1;
    int b = 2;
    int c = 3;

    c = a + b;

通过gcc转换为汇编代码

可以看出在对a+b进行运算之前,是将a,b的值放到了寄存器中,然后进行加法运算,最后保存到c所在的内存中。需要被赋值的对象需要在内存中有确切的位置,即是左值。

所有左值(无论是数组,函数或者不完全类型)都可以转换为右值。就是将内存中的数据移到寄存器中。

3.函数的返回值当引用

1.当函数返回局部变量引用值为引用的时候:

若返回栈变量,不能成为其它引用的初始值,

函数返回局部变量不能作为左值

2.若返回静态变量或者全局变量:可以成为其他引用的初始值,即可作为右值,使用也可以作为左值使用

3.返回形参当引用

普通形参也是局部变量

引用变量为形参是可以的

总结就是看变量的生存周期,要避免短周期的变量的引用,它很有可能释放,会出现问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值