为什么两个乐队都回归相同?

时间:2018-01-10 11:41:09

标签: c++ reference

我有两个功能,

struct a
{
public:
    int* b;

    int *& fun1()
    {
        return b;
    }

    int * fun2()
    {
        return b;
    }
};

void main()
{
    a* some = new a;
    some->b = new int(1);

    int* x1 = some->fun1();
    int* x2 = some->fun2();

    return;
}

为什么两人都归来一样? 为什么如果some->bnullptrfunc两个 switch(days.toLowerCase()) { case 'mon': document.write("Today is Monday"); break; case 'tue': document.write("Today is Tuesday"); 将无异常返回null?

1 个答案:

答案 0 :(得分:1)

第一个函数返回对b指向的对象的原始数据成员some的引用。因此,您可以使用此引用更改原始数据成员b

但是你不能使用第二个函数做同样的事情,因为它返回原始数据成员b的值的副本。

这是一个示范程序

#include <iostream>

struct a
{
public:
    int *b;

    int * & fun1()
    {
        return b;
    }

    int * fun2()
    {
        return b;
    }
};

int main()
{
    a *some = new a;
    some->b = new int(1);

    some->fun1() = new int( 2 );

    std::cout << *some->b << std::endl;

//  This statement will not compile.    
//  some->fun2() = new int( 3 );

    delete some->b;
    some->b = nullptr;

    delete some;

    return 0;
}

程序输出

2

如果取消注释注释语句,则会出现编译器错误。