我非常喜欢Xcode为语言的可能可用成员函数提供洞察力的方式,如果不是因为我今天注意到的奇怪之处,我更愿意相对于文本伴侣来使用它。
当string s = "Test string";时,唯一可用的substr签名如下所示

但是,根据我的理解,签名应该是什么我在网上看到?
string substr ( size_t pos = 0, size_t n = npos ) const;实际上,s.substr(1,2);既可以理解,也可以在Xcode中工作。
为什么当我尝试方法完成时它没有显示出来?(Ctrl-Space)
发布于 2012-01-21 18:05:45
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错误,也可能不是Xcode错误。理想情况下,您希望看到包含substr()等简单函数的默认参数的完成,但是对于STL容器构造函数,您可能根本不想看到它们。也许这是一种选择,但我不希望看到这种情况得到纠正。不过,我很乐意和你一起开雷达。
https://stackoverflow.com/questions/8886220
复制相似问题