2016-12-29 31 views
0

我在an article看到類似這樣的代碼:什麼是`auto classMemberFunction() - > void {}`簽名?

#include <iostream> 

class MyClass { 
public: 

    auto myFunction(int i)->void { 
    std::cout << "Argument is " << i << std::endl; 
    } 
}; 

void main() { 
    MyClass myClass; 
    myClass.myFunction(4); 
} 

程序正確打印輸出說法是4,但我不明白的類函數成員的簽名,什麼是它的與平常的不同。使用這個不同的簽名而不是void myFunction(int i)有用嗎?

回答

1

這是(C)使用已在C++ 11中引入的尾隨返回類型語法。語法是:

auto functionName(params) -> returnType; 
auto functionName(params) -> returnType { } 

它的工作原理相同,與左邊的返回類型的經典函數聲明,除了結尾類型可以使用函數的簽名,即引入的名稱:

T Class::function(param);  // No particular behaviour 
auto Class::function(param) -> T; // T can use Class::Foo as Foo, decltype(param), etc. 

在這種情況下,除了一致性之外沒有其他意義。

+0

一致性真的可以稱爲濫用? (我的意思是如果至少有一個函數實際需要它) – StoryTeller

+0

@StoryTeller你的問號就是所謂的圓括號。這是一個有趣的問題 - 我個人發現尾部類型的語法難以閱讀,但我當然明白爲什麼它會引人注目。 – Quentin

相關問題