2014-01-14 70 views
2

我見過MSDN article類似的函數定義這個:你能解釋一下這個C++函數定義的語法嗎?

auto incr(int i) -> int {return i+1;} 

它編譯和正常工作與VS2012。有人可以解釋它的語法嗎?它是一個命名的lambda表達式嗎?在「C++編程語言第4版」中有描述嗎?爲什麼有人會這樣寫,而不是使用一個簡單的表格:

int incr(int i) {return i+1;}; 
+0

'auto SomeClass :: foo() - > SomeInnerClass'允許您擺脫返回類型上的'SomeClass ::'。除此之外(除了我忘記了主要用途,顯示在答案中),主要是可讀性。無論如何,[Wikipedia](http://en.wikipedia.org/wiki/C%2B%2B11#Alternative_function_syntax)。 – chris

+0

這是在C++ 11中添加的一個新的可選合成語法,它簡化了一些東西,如使命名空間隱含,但沒有特別的理由來使用它。我相信它的主要目標是使代碼更具可讀性。 – Havenard

+1

可能的重複[auto main() - > int]的含義是什麼(http://stackoverflow.com/questions/21085446/what-is-the-meaning-of-auto-main-int) –

回答

4

這是一個尾隨返回類型。儘管它可以用於所有函數聲明,但它在定義函數模板時最爲有用。從函數模板返回的類型通常取決於某些表達式的結果,並且有相關類型的變量來表示它們會很有幫助。

template <typename M, typename N> 
auto multiply(M const& m, N const& n) -> decltype(m * n) { 
    return m * n; 
} 

由於mn的參數聲明之後纔會宣佈,將返回類型後的參數聲明而不是幫助模板代碼之前。在非模板代碼中,當推導出返回類型時,使用auto可能對C++ 14更加有用。在C++ 11中,它本質上是非模板代碼的風格選擇。

相關問題