c++ 的左值引用和右值引用

引用,是变量名前加&符号。加一个(&)是左值引用。加两个(&&)是右值引用。

简而言之,左值引用,就是给一个名称标识符新起了一个别名。而右值引用,就是只能把它放在等号右边,传值给别人,而不能进行赋值操作。

感觉可以套用到类属性定义层面,只读属性大概用右值引用比较合适,嘿嘿。

于是,尝试着编写了一个计算年龄的简单程序:

#include <string>
#include <iostream>
#include <ctime>

using namespace std;

class Person
{
    public:
        string &name(void) {
            return _name;
        };

        int &birthYear(void) {
            return _birth_year;
        };

        int &&age(void) {
            struct tm *tt;
            time_t t;
            t = time(nullptr);

            tt = gmtime(&t);
            
            return tt->tm_year + 1900 - _birth_year;
        }
    private:
        string _name;

        int _birth_year;

        int _age;
};

int main(int argc, char *argv[])
{
    Person person;

    person.name() = "测试";

    int y = 2000;

    cout << "请输入您的出生年份:";
    cin >> y;

    person.birthYear() = y;

    int age = person.age();

    cout << person.name() << ",您好。您出生于" << person.birthYear() << "年,今年" << age << "岁。" << endl;

    return 0;
}

保存到test.cpp,然后编译:

g++ -std=c++20 -o test test.cpp

右值引用为c++标准11引入的,所以,这里采用了稍新的c++标准进行编译。收获警告一条,暂时还没了解到如何通过修改代码而不是更改编译时配置的方式消除这句警告。

test.cpp:25:20: warning: returning reference to local temporary object [-Wreturn-stack-address]
            return tt->tm_year + 1900 - _birth_year;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值