首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode C++开发,需要澄清

Xcode C++开发,需要澄清
EN

Stack Overflow用户
提问于 2012-01-16 21:01:57
回答 1查看 710关注 0票数 6

我非常喜欢Xcode为语言的可能可用成员函数提供洞察力的方式,如果不是因为我今天注意到的奇怪之处,我更愿意相对于文本伴侣来使用它。

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

但是,根据我的理解,签名应该是什么我在网上看到

代码语言:javascript
复制
string substr ( size_t pos = 0, size_t n = npos ) const;

实际上,s.substr(1,2);既可以理解,也可以在Xcode中工作。

为什么当我尝试方法完成时它没有显示出来?(Ctrl-Space)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-21 18:05:45

Xcode正在正确地执行完成,但这并不是您所期望的。你其实是在不知不觉中回答了这个问题。正如您所说的,stringsubstr()方法的函数签名是:

代码语言:javascript
复制
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构造函数的两个签名是:

代码语言:javascript
复制
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_typeTAllocator的构造函数。

根据您对此的看法,它可能是Xcode错误,也可能不是Xcode错误。理想情况下,您希望看到包含substr()等简单函数的默认参数的完成,但是对于STL容器构造函数,您可能根本不想看到它们。也许这是一种选择,但我不希望看到这种情况得到纠正。不过,我很乐意和你一起开雷达。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8886220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档