首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++智能揭示的一个疑问

2013-07-01 
c++智能提示的一个疑问?最近用VS2010学习C++,由于是初学,发现C++里的智能提示有点看不懂。和C#区别甚大。如

c++智能提示的一个疑问?
最近用VS2010学习C++,由于是初学,发现C++里的智能提示有点看不懂。和C#区别甚大。如下2张图所示。
c++智能揭示的一个疑问
c++智能揭示的一个疑问

从上图看出,C#智能提示相当简单名了,很好理解:命名空间.方法名(参数说明)
但C++的那种表示结构:命名空间::<参数?>::命名空间 &方法名  这种方式尖括号,&符号等等完全无法理解。
所以在这请教各路大侠,我该如何去理解c++那种智能提示的结构?
[解决办法]
模板类而已。等你学到模板自然就懂了。
[解决办法]
因为cout只是后面那一场串的一个别名..
你只要看后面的参数部分就好了.
这里有用到模板和引用.
[解决办法]

std::basic_ostream<char, std::char_traits<char> >::_Myt &write(const char * _Str, std::streamsize _Count )

其实它就是:
ostream & write( const char * _Str, streamsize _Count );

c++与C#不同,cout不象Console那样是一个类,而是一个对象,它的类名是ostream。write方法有一个ostream&类型的返回值,是为了象下面那样调用:


cout.write(a).write(b).write(c);


这个提示要这样理解:
返回值类型:std::basic_ostream<char, std::char_traits<char> >::_Myt &
方法名:write
参数列表:onst char * _Str, std::streamsize_Count 

返回值类型中:
std是命名空间,
basic_ostream是std中的一个类模板,尖括号中是模板参数,你可以把std::basic_ostream<char, std::char_traits<char> >看成是一个类:std::ostream。事实上,std::ostream就是一个类型别名:
typedef basic_ostream<char, std::char_traits<char> > ostream;

而std::basic_ostream<char, std::char_traits<char> >::_Myt 其实就是std::basic_ostream<char, std::char_traits<char> >,是在实现basic_ostream时为了方便而定义的别名:

namesapce std
{
  template< typename CHAR_TYPE, typename TRAITS_TYPE>
  class basic_ostream
  {
     typedef basic_ostream< CHAR_TYPE, TRAITS_TYP> _Myt;
   ...

这样在实现类似于write这类方法时就可以直接写
_Myt & write(……
而不用去写
basic_ostream< CHAR_TYPE, TRAITS_TYP> &  write(……
这样代码写起来比较简单,但却让IDE的提示更难以理解了。

热点排行