我有两个功能,
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->b
为nullptr
,func
两个 switch(days.toLowerCase())
{
case 'mon':
document.write("Today is Monday");
break;
case 'tue':
document.write("Today is Tuesday");
将无异常返回null?
答案 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
如果取消注释注释语句,则会出现编译器错误。