簡體   English   中英

C++ function 中的自動返回類型與指定返回類型

[英]auto return types in C++ function vs specifying return type

在我工作的代碼庫中,我看到以下內容

class custom {
  auto set_data_type(custom_type_t type_t) -> custom & {
    // set some stuff
    // return *this;
  }
}

為什么我們不能簡單地做

class custom {
  custom & set_data_type(custom_type_t type_t) {
    // set some stuff
    // return *this;
  }
}

當您已經知道返回類型並且已經將其寫在->...位置時,在這種情況下使用auto有什么意義?

似乎auto僅在與decltype(arg)一起使用並且arg可能具有不同的返回類型時才有用?

我會說風格。

此外,它允許在任何情況下保持一致,

  • 簡單的一個(就像這個),
  • 更有用的(“復雜” decltype(arg)范圍(-> iterator而不是類型名typename C::iterator
  • 或需要一個 (lambda)。

對我來說,此功能的最大用途是在 cpp 文件中定義 function 主體時使用嵌套類型:

class MyLongClassName
{
  using ANestedType = ...;

  ANestedType myFunction();
}

當您實現 function 主體時,此語法避免了一些重復:

MyLongClassName::ANestedType MyLongClassName::myFunction()
{ ... }

相對

auto MyLongClassName::myFunction() -> ANestedType
{ ... }

我相信,根本不應該使用“自動”。 恕我直言,這是 void* 的丑陋兄弟姐妹; 它對程序員隱藏了類型,而最好確切地知道使用的是什么類型; 這會使一個人的編程風格變得笨拙、混亂並引發錯誤。 雖然唯一“合理”的用法是 typename “縮短”,但它實際上是荒謬的,因為短類型名稱不需要替換,而長名稱還有另一個關鍵字。 恕我直言。

暫無
暫無

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

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