[英]Xcode C++ development, clarification needed
我絕對喜歡Xcode提供深入了解該語言可能的成員函數的方式,如果不是我今天發現的奇怪之處,我希望將其相對於例如文本伴侶使用。
當string s = "Test string";
唯一可用的substr
簽名如下所示
但是據我了解,以及我在網上看到的簽名應該是
string substr ( size_t pos = 0, size_t n = npos ) const;
確實s.substr(1,2)
; 在Xcode中既可以理解又可以使用。
為什么在我嘗試完成方法時不顯示? (Ctrl-空格鍵)
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
默認值有一個默認分配。 現在,看一下Xcode在構造vector
時的建議:
沒有參數列表的建議實際上是僅使用Allocator
的構造函數。 僅采用size_type
的建議實際上是采用size_type
, T
和Allocator
的構造函數。
根據您對此的看法,它可能是也可能不是Xcode錯誤。 理想情況下,您希望看到具有諸如substr()
類的簡單函數的默認參數的substr()
,但是對於STL容器構造函數,您可能幾乎永遠都不想看到它們。 也許這是一個選擇,但我不希望看到此問題得到糾正。 不過,我很樂意與您一起使用雷達。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.