type func(){ ... return obj;}
type *func(){ ... return &obj;}
type &func(){ ... return obj;}
以上的 type 可以是 char,short,int,string, ... 總之是個型態
概觀:
type func(){ ... return obj;}
將 obj 內容回傳 ---- return by value
type *func(){ ... return &obj;}
將 obj 的位址內容回傳 ---- return by value
type &func(){ ... return obj;}
將 obj 本尊回傳 ---- return by reference
"本尊"大概可以裡解成 *(obj)
他跟obj是同個東西,所以你可以做這件事:
func()=anotherObj;
舉個例子:
#include <cstdio>
int a=1;
int &f(){return a;}
int main(const int argc,const char *argv[])
{
f()=2;
printf("%d\n",a);
return 0;
}
// 最後你會看到印出是2而不是1
如果還是很不習慣的話可以跟這個比較一下
#include <stdio.h>
int a=1;
int *f(){return &a;}
int main(const int argc,const char *argv[])
{
*(f())=2;
printf("%d\n",a);
return 0;
}
那如果丟區域變數會怎樣?
#include <cstdio>
int a=1;
int &f(){int a=0; return a;}
int main(const int argc,const char *argv[])
{
f()=2;
printf("%d\n",a);
return 0;
}
可能看不出嚴重性,那把他換成址標
#include <stdio.h>
int a=1;
int *f(){int a=0; return &a;}
int main(const int argc,const char *argv[])
{
*(f())=2;
printf("%d\n",a);
return 0;
}
也就是說對著不存在的東西作存取
所以切記,別把區域變數丟出來,會碰到已經放掉的記憶體空間
(除非你就是想這樣玩(?))