返回信息流sgi_stl的一小段源码:
template <class InputIterator>
inline iterator_traits<InputIterator>::difference_type
distance(InputIterator first, InputIterator last) {
typedef typename iterator_traits<InputIterator>::iterator_category category;
return __distance(first, last, category());
}
为啥第二行inline后面不用加typename关键字?
这是一条镜像帖。来源:北邮人论坛 / cpp / #84967同步于 2015/1/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于模板里面的typename
xiaobing307
2015/1/4镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
下面第四行呢?
template <class InputIterator>
inline iterator_traits<InputIterator>::difference_type
__distance(InputIterator first, InputIterator last, input_iterator_tag) {
iterator_traits<InputIterator>::difference_type n = 0;
while (first != last) {
++first; ++n;
}
return n;
}
【 在 qiukun 的大作中提到: 】
: 额,那是个返回值,同学
=-= 一样啊本质上。要不你看看 cppp
【 在 xiaobing307 的大作中提到: 】
: 下面第四行呢?
: template <class InputIterator>
: inline iterator_traits<InputIterator>::difference_type
: ...................
好久没看这个stl的代码了,原来的代码真是这样写的吗?标准规定对于嵌套从属名称前面必须加typename,除非是基类或者初始化列表中,这段代码估计在一些严格遵守C++标准的编译器里都编译不过,lz可以test一下。
【 在 xiaobing307 的大作中提到: 】
: sgi_stl的一小段源码:
: template <class InputIterator>
: inline iterator_traits<InputIterator>::difference_type
: ...................
确实,我另写了一小段代码测试,g++编译不过,提示要加typename
代码是以前的版本,《stl源码剖析》那本书对应的源码
【 在 gaoweiwei 的大作中提到: 】
: 好久没看这个stl的代码了,原来的代码真是这样写的吗?标准规定对于嵌套从属名称前面必须加typename,除非是基类或者初始化列表中,这段代码估计在一些严格遵守C++标准的编译器里都编译不过,lz可以test一下。
再请教一个问题
我看vector的实现全是public和protected,没有用private,这样做有什么特别的好处么?
【 在 gaoweiwei 的大作中提到: 】
: 好久没看这个stl的代码了,原来的代码真是这样写的吗?标准规定对于嵌套从属名称前面必须加typename,除非是基类或者初始化列表中,这段代码估计在一些严格遵守C++标准的编译器里都编译不过,lz可以test一下。