读书人

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

发布时间: 2013-07-01 12:33:04 作者: rapoo

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的提示更难以理解了。

读书人网 >C++

热点推荐