java statement 返回类型,6.3 返回类型和返回语句 | Return type Return statement
無返回值函數(shù)
對于返回類型是void的函數(shù),return后不跟表達式。最后的 return; 可以沒有而讓程序隱式執(zhí)行。在void函數(shù)中的return語句還有提前使函數(shù)退出的作用而不進行接下來的計算,如定義一個swap函數(shù)在二者相同時不繼續(xù)運算直接退出:
void swap(int& v1, int& v2){
if (v1==v2) return;
int tmp = v2;
v2 = v1;
v1 = tmp;
//可以不顯式添加return
}
有返回值函數(shù)
函數(shù)不是void類型,則每個void語句都必須返回一個值,且這個值必須與函數(shù)返回類型相同或可以隱式轉(zhuǎn)換為函數(shù)的返回類型。同樣,程序執(zhí)行到return語句后會提前退出:
int foo(int a){
if (a) return 0;
return 1;
}
int main(){
int b = 2, c = 0;
cout<
}
值如何被返回
返回的方式和初始化一個變量或形參完全一致:返回的值用于初始化調(diào)用點的一個臨時量,此臨時量即函數(shù)調(diào)用結(jié)果。
不要返回局部對象的引用或指針
否則當結(jié)束運行,函數(shù)的占用空間被完全釋放,引用或指針不再有效。
返回類類型的函數(shù)和調(diào)用運算符
調(diào)用運算符的優(yōu)先級和點運算符或箭頭運算符相同。因此可以使用函數(shù)調(diào)用的結(jié)果直接訪問結(jié)果對象的成員:
string a(string s1, string s2){return s1+s2;}
int main(){
string sa = "a", sb = "b";
cout<
}
引用返回左值
調(diào)用一個返回引用的函數(shù),得到的結(jié)果是一個左值。因此可以為返回類型是非常量引用的函數(shù)的結(jié)果賦值:
//注意函數(shù)返回類型為char!
char get_var(string& str, string::size_type index){
return str[index];
}
int main(){
s = "hello";
get_val(s, 0) = 'H';
cout<
}
列表初始化返回值
可以返回花括號包圍的值列表給一個臨時量。此列表也用來對表示函數(shù)返回值的臨時量進行初始化。若是空,則默認初始化。否則由函數(shù)返回類型決定返回值。
就如果返回的是內(nèi)置類型,則花括號列表只允許最多一個值且該值所占空間不應(yīng)大于目標類型的空間。若是類類型則由類本身定義,如vector的列表初始化。
主函數(shù)main的返回值
允許main函數(shù)沒有return語句而直接結(jié)束,編譯器會隱式地在最后插入 return 0。
遞歸
無論直接或間接,一個函數(shù)調(diào)用了自身則稱為遞歸函數(shù)。如下列階乘函數(shù):
int factorial(int val){
if (val) {
cout<
}
//注意val-1不能是val--否則死循環(huán)
//若是--val不會報錯,但會多減一次,使最終返回值為 0
return 1;
}
返回數(shù)組指針
數(shù)組不能拷貝,所以不能被返回。
返回數(shù)組的指針可用類型別名簡化:
typedef int arrT[10];
using arrT = int[10];//與上述等價且易懂
arrT* func(int i); //返回一個指向(含有10個整數(shù)的數(shù)組的)指針
聲明一個返回數(shù)組指針的函數(shù)
函數(shù)形式如下:
type (*function(parameter_list))[dimension]
func(int i):表示調(diào)用func時需要int i作為實參
(*func(int i)):表示可以對調(diào)用結(jié)果進行解引用操作
(*func(int i))[10]:表示解引用func的調(diào)用將得到一個大小10的數(shù)組
int (*func(int i))[10]:表示數(shù)組中元素是int類型。
尾置返回類型trailing return type
任何函數(shù)定義都可以使用尾置返回,對于返回類型復(fù)雜的函數(shù)較為有效,比如返回類型是數(shù)組的指針或者數(shù)組的一樣弄。尾置返回類型跟在形參列表后面以 -> 開頭:
auto func(int i) -> int(*)[10]
使用decltype
如果知道函數(shù)返回指針指向哪個數(shù)組,即可使用decltype聲明返回類型。例如下列函數(shù)返回的指針根據(jù)參數(shù)不同而改變:
int odd[] = {1, 3, 5, 7, 9};
int even[] = {2, 4, 6, 8, 0};
decltype(odd) *arrPtr(int i){
return (i%2) ? &odd : &even;
}
int main(){
int i = 3;
cout<
}
attrPtr使用decltype表示其返回類型是個指針,并且該指針所指的對象與odd的類型一致。因為odd是數(shù)組,arrPtr返回一個指向含有5個整數(shù)數(shù)組的指針。注意decltype的結(jié)果是個數(shù)組,要想表示arrPtr返回指針還必須在函數(shù)聲明時加一個*符號。
總結(jié)
以上是生活随笔為你收集整理的java statement 返回类型,6.3 返回类型和返回语句 | Return type Return statement的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《赠顾墨曹诗》是哪个时期的作品?
- 下一篇: 在c语言中a 这条语句的作用,C语言复习