如何通过IntelliSense查看标准C++库的文档?这是关于IT技术的问题。

16

我几天前开始使用Visual Studio 2012学习C++。我习惯于使用IntelliJ IDEA编程Java,那里总是会显示调用方法时的文档和预期参数。在VS2012中是否也有这样的功能来支持C++?

如果我理解正确的话,由于IntelliSense的原因,应该已经显示了这个功能,但是例如当我调用向量或字符串的成员函数时,它只显示:

public: std::vector<std::string, std::allocator<std::string>>::const_iterator std::vector<std::string, std::allocator<std::string>>::begin() const

但什么都没有指示返回什么,需要什么参数,这个函数是做什么用的。 我是不是错过了文档文件?

任何帮助都将不胜感激!


2
它告诉你返回的是:std::vector<std::string, std::allocator<std::string>>::const_iterator,但你说得对,如果提供更多信息会更好。 - metalhead
谢谢您提供的信息,这已经让事情更加清晰了 :) - gargaroff
1
没问题。当你使用大量模板化方法时,Intellisense可能会变得很长并且复杂,但返回类型始终是访问级别之后的第一部分。有很多网站可以告诉你如何使用STL。cppreference.com是我最喜欢的之一。祝你好运! - metalhead
3
关于函数的评论怎么样?有什么方法可以获取它们? - Mark
4
Visual Studio 2012中的C#确实有相当不错的文档。我不明白为什么这个功能没有包括在C++中... - Janman
4个回答

0
据我所知,即使在2019版(尚未尝试2022版,但我猜测也不会),Visual Studio也没有这个功能。我认为有两个原因:
  • C++比Java复杂得多。存在许多历史问题。它起初并未设计带有文档注释语法。
  • 标准库使用太频繁,你应该记住其API。要记住的东西并不多,对吧?

一些IDE可以在注释以Doxygen格式进行时显示提示。我知道VS Code的C++插件Qt Creator可以做到。也许Visual Studio也可以?但是Visual Studio 的STL实现不使用Doxygen。

此外,如果您使用模板,请不要期望了解类型名称的含义,因为将会出现一些像这样的类型名称:

struct boost::fusion::vector<class boost::spirit::lex::lexertl::iterator<class boost::spirit::lex::lexertl::functor<struct boost::spirit::lex::lexertl::token<class std::_String_iterator<class std::_String_val<struct std::_Simple_types<char> > >,struct boost::mpl::vector<__int64,struct String,struct Symbol,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na>,struct boost::mpl::bool_<1>,unsigned __int64>,class boost::spirit::lex::lexertl::detail::data,class std::_String_iterator<class std::_String_val<struct std::_Simple_types<char> > >,struct boost::mpl::bool_<1>,struct boost::mpl::bool_<1> > > & __ptr64,class boost::spirit::lex::lexertl::iterator<class boost::spirit::lex::lexertl::functor<struct boost::spirit::lex::lexertl::token<class std::_String_iterator<class std::_String_val<struct std::_Simple_types<char> > >,struct boost::mpl::vector<__int64,struct String,struct Symbol,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na>,struct boost::mpl::bool_<1>,unsigned __int64>,class boost::spirit::lex::lexertl::detail::data,class std::_String_iterator<class std::_String_val<struct std::_Simple_types<char> > >,struct boost::mpl::bool_<1>,struct boost::mpl::bool_<1> > > const & __ptr64,class boost::spirit::lex::lexertl::iterator<class boost::spirit::lex::lexertl::functor<struct boost::spirit::lex::lexertl::token<class std::_String_iterator<class std::_String_val<struct std::_Simple_types<char> > >,struct boost::mpl::vector<__int64,struct String,struct Symbol,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na,struct boost::mpl::na>,struct boost::mpl::bool_<1>,unsigned __int64>,class boost::spirit::lex::lexertl::detail::data,class std::_String_iterator<class std::_String_val<struct std::_Simple_types<char> > >,struct boost::mpl::bool_<1>,struct boost::mpl::bool_<1> > > const & __ptr64,struct boost::spirit::info const & __ptr64>

1
刚注意到这个问题是在2013年提出的。不过没关系,我还是把答案留在这里吧。我猜问问题的人现在应该已经成为了C++的专家。 - AtomicGu
在某个时间点之后(我不确定是在2017年出现的),IS理解javadoc/doxigen注释框架(但不包括标签),并在工具提示中显示注释。但仅此而已。显然,你必须自己添加注释,标准和操作系统头文件中没有它们。 - Swift - Friday Pie

0

IntelliSense 显示了返回的确切类型。 如果您想知道如何处理此类型,请尝试在 cppreference 上搜索,这是一个非常有用的 STL 资源。


0
正如这个答案所说,在您提供的示例中,Intellisense正在提供完整的函数签名,尽管由于完全限定的类型名(std :: vector < std :: string,std :: allocator < std :: string >>)被放在返回值和函数名称之前,因此在视觉上有点难以解析。这里是用T替换类型的函数签名:
public:
T::const_iterator T::begin() const

在Visual Studio中直接没有太多的文档可用,但是微软确实有很好的在线资源,例如VS2015向量类


-1

阅读所有模板和std命名空间很烦人,但返回类型是vector<string>::const_iterator

我听说过Stephan Lavavey(STL的Microsoft维护者)提到过,如果某些东西无法编译,他希望有更好的错误消息。也许这会使智能感知更容易使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接