簡體   English   中英

遞歸函數中的返回類型推導

[英]Return type deduction in recursive function

下面的代碼匯編

auto foo(int i) {
  if( i == 1 )
    return i;
  else 
    return foo(i-1)+i ; 
}

雖然以下沒有 ,但是c ++ 1y

auto foo(int i) {
  return (i == 1) ? i : foo(i-1)+i ;  
}

為什么編譯器不能在第二種情況下推斷出返回類型? 我在這里錯過了一些東西嗎?

我知道在第二種情況下(i == 1)之后有一個序列點,但這不應該影響編譯,對吧?

第一個工作是因為這個規則, 最新草案的 7.1.6.4/11

但是,一旦在函數中看到了return語句,從該語句推導出的返回類型就可以在函數的其余部分中使用,包括在其他return語句中。

因此返回類型從第一個return語句推導為int ; 第二個只是檢查,以確保它也給int ,假設遞歸調用。

第二個不編譯,因為表達式的類型取決於返回類型; 所以類型無法推斷。

只有在遞歸調用之前它具有非遞歸返回語句時,遞歸函數才能具有自動返回類型。 請參閱正常功能的返回類型扣除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM