試圖理解爲什麼類型推導在這裏與條件運算符一起失敗。
在這種情況下,標準中的某些東西試圖防止類型扣除?任何理解這一點的指針都會很棒。C++類型推斷遞歸函數
auto mfact(int i)
{
return (0==i) ? 1 : i * mfact(i-1);
}
auto mfact2(int i)
{
if (0 == i)
return 1;
else
return i * mfact2(i-1);
}
error: use of ‘auto mfact(int)’ before deduction of ‘auto’ return (0==i) ? 1 : i * mfact(i-1);
您應該*至少*發佈您的編譯器錯誤消息。在*最佳*後發佈[mcve]。 –
一旦函數中的所有代碼都被檢查過,就會推導出返回類型。因此在函數的代碼中使用函數簽名是不成熟的。你必須在聲明中聲明返回類型。 –
@RichardHodges如果您交換條件,將'return i * mfact2(i-1)'放在'return 1;'之上,'mfact2'無法編譯。這是否意味着該類型是由編譯器發現的第一個return語句推導出來的?使用GCC 7.1.1 – 2017-07-30 17:43:37