Xcode正確執行完成,但它不是你所期望的。你實際上已經在不知不覺中回答了這個問題。爲string
的substr()
方法函數簽名,就像你說的,就是:
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提示:
的建議沒有參數列表是實際上,只需花一Allocator
構造。只需要size_type
的建議實際上是需要size_type
,T
和Allocator
的構造函數。
根據您對此的看法,它可能是也可能不是Xcode錯誤。理想情況下,您希望使用默認參數來完成像substr()
這樣的簡單函數的完成,但對於STL容器構造函數,您可能幾乎從不想看到它們。也許這可能是一個選擇,但我不希望看到這個更正。儘管如此,我還是很樂意與你合作。
我相當確信,您現在可以做的最好的事情就是提交一份錯誤報告。 – zneak