2012-01-16 59 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

错误或功能取决于您可能喜欢的行为。 –