2012-01-16 95 views
6

我非常喜歡Xcode提供對語言可能的可用成員函數的深入瞭解,如果不是我今天注意到的奇怪現象,我寧願使用它相對於文本伴侶。Xcode C++開發,需要澄清

當如圖

enter image description here

但是,從我的理解,什麼i see online唯一可用的substr簽名string s = "Test string";簽名應該是

string substr (size_t pos = 0, size_t n = npos) const; 

事實上s.substr(1,2);既可以理解,也可以在Xcode中使用。

爲什麼當我嘗試方法完成時不顯示? (Ctrl-Space)

+0

我相當確信,您現在可以做的最好的事情就是提交一份錯誤報告。 – zneak

回答

15

Xcode正確執行完成,但它不是你所期望的。你實際上已經在不知不覺中回答了這個問題。爲stringsubstr()方法函數簽名,就像你說的,就是:

string substr (size_t pos = 0, size_t n = npos) const; 

所有參數substr()有缺省分配,因此對Xcode中,s.substr()(不帶參數)是有效的代碼完成插入,因爲它的確是s.substr(0, s.npos)。您可以使用任何數量的標準C++函數和默認參數進行確認。最容易看到的地方是任何STL容器構造函數。例如vector。我們都知道,vectors可以採用Allocator,但對於大多數臨時用途,分配Allocator的默認參數對於「足夠好」。果然,兩人的簽名vector構造是:

explicit vector (const Allocator& = Allocator()); 
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator()); 

在這兩種情況下,Allocator參數有一個默認的分配,並在第二,在T默認值有一個默認的分配。現在,構建vector時,看看什麼樣的Xcode提示:

Xcode 4.2.1 Code Completions for vector constructor

的建議沒有參數列表是實際上,只需花一Allocator構造。只需要size_type的建議實際上是需要size_type,TAllocator的構造函數。

根據您對此的看法,它可能是也可能不是Xcode錯誤。理想情況下,您希望使用默認參數來完成像substr()這樣的簡單函數的完成,但對於STL容器構造函數,您可能幾乎從不想看到它們。也許這可能是一個選擇,但我不希望看到這個更正。儘管如此,我還是很樂意與你合作。

+1

+1爲優秀的解釋。 –

+0

所以這是Xcode中的另一個bug。 – Florian

+0

錯誤或功能取決於您可能喜歡的行爲。 –