2017-08-31 37 views
-4

我見過一個對象的構造函數(例如類A)被稱爲A()A{} 最新的區別?他們似乎都做同樣的事情。不同的方法調用c + +構造函數

+1

您的C++書籍在這個主題上說了些什麼? –

+0

請參閱:http://en.cppreference.com/w/cpp/language/initialization –

+0

花更多時間閱讀構造函數,您將自己得到答案。 – secretgenes

回答

2

他們似乎都做同樣的事情。

這是因爲它們是同一事物的兩種替代語法。

最新的區別是什麼?

  • A{}不存在,直到C++ 11。
  • 在變量聲明中,A a()在語法上與函數聲明不一致,語言規則聲明它是函數聲明。 A a{}解決了此限制,因爲它不是函數聲明的語法。現在,這是A a()A a{}之間的差異以及存在A a{}的原因,但是不需要不具有A{}的不一致性。

另有說法爲除了A()A{}A { arg1, arg2, ... };是列表初始化語法。對於泛型編程而言,支持一個空參數列表是必要的(或者至少非常有用):A{}

+0

_'A a()'在語法上與函數declaration_有關:在Scott Meyers,IIRC之後,有時它被稱爲「最令人頭痛的解析」。 – rfx