Xcode C ++开发,需要澄清

时间:2012-01-16 21:01:58

标签: c++ xcode

我非常喜欢Xcode提供对该语言可能的成员函数的深入了解的方式,并且如果不是因为我今天注意到的奇怪现象,我宁愿相对于文本伙伴使用它。

string s = "Test string";唯一可用的substr签名如图所示

enter image description here

据我所知,以及签名应该是i see online

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

确实s.substr(1,2);已被理解并在Xcode中有效。

为什么我尝试方法完成时不显示? (Ctrl-空格)

1 个答案:

答案 0 :(得分:15)

Xcode正确执行完成,但这不是您所期望的。你实际上已经在不知不觉中回答了这个问题。正如您所说,string的{​​{1}}方法的函数签名是:

substr()

string substr ( size_t pos = 0, size_t n = npos ) const; 的所有参数都有默认赋值,因此对于Xcode,substr()(没有参数)是要插入的有效代码完成,因为它的确实 {{1} }。您可以使用任何数量的带有默认参数的标准C ++函数来确认这一点。最简单的地方是使用任何STL容器构造函数。

s.substr()为例。我们都知道s.substr(0, s.npos)可以使用vector,但分配给vectors的默认参数对于大多数临时用途来说都“足够好”。果然,Allocator构造函数的两个签名是:

Allocator

在这两种情况下,vector参数都有默认分配,而在第二种情况下,explicit vector ( const Allocator& = Allocator() ); explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() ); 默认值具有默认分配。现在,看看Xcode在构建Allocator时建议的内容:

Xcode 4.2.1 Code Completions for vector constructor

没有参数列表的建议实际上只需要T的构造函数。只需vector的建议实际上是采用Allocatorsize_typesize_type的构造函数。

根据您对此的看法,它可能是也可能不是Xcode错误。理想情况下,您希望查看带有T等更简单函数的默认参数的完成,但对于STL容器构造函数,您可能几乎从不想看到它们。也许它可能是一种选择,但我不希望看到这一点得到纠正。我很乐意和你一起重复雷达。