我非常喜欢Xcode提供对该语言可能的成员函数的深入了解的方式,并且如果不是因为我今天注意到的奇怪现象,我宁愿相对于文本伙伴使用它。
当string s = "Test string";
唯一可用的substr
签名如图所示
据我所知,以及签名应该是i see online
string substr ( size_t pos = 0, size_t n = npos ) const;
确实s.substr(1,2)
;已被理解并在Xcode中有效。
为什么我尝试方法完成时不显示? (Ctrl-空格)
答案 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
时建议的内容:
没有参数列表的建议实际上只需要T
的构造函数。只需vector
的建议实际上是采用Allocator
,size_type
和size_type
的构造函数。
根据您对此的看法,它可能是也可能不是Xcode错误。理想情况下,您希望查看带有T
等更简单函数的默认参数的完成,但对于STL容器构造函数,您可能几乎从不想看到它们。也许它可能是一种选择,但我不希望看到这一点得到纠正。我很乐意和你一起重复雷达。