关于bitset的一点疑问

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

文档中,基本都是如此定义了bitset的一个ctor:

bitset(

const basic_string<CharType, Traits, Allocator>& _Str,

typename basic_string<CharType, Traits, Allocator>::size_type

_Pos = 0,

typename basic_string<CharType, Traits, Allocator>::size_type

_Count = basic_string<CharType, Traits, Alloc>::npos

);

在vc71和sltport中,源代码里面根本就没有这个定义,取而代之的,是两个函数,下面是vc71的代码:

explicit bitset(const basic_string<_Elem, _Tr, _Alloc>& _Str,

_BITSET_SIZE_TYPE _Pos = 0)

{ // construct from [_Pos, ...) elements in string

_Construct(_Str, _Pos, basic_string<_Elem, _Tr, _Alloc>::npos);

}

explicit bitset(const basic_string<_Elem, _Tr, _Alloc>& _Str,

_BITSET_SIZE_TYPE _Pos,

_BITSET_SIZE_TYPE _Count)

{ // construct from [_Pos, _Pos + _Count) elements in string

_Construct(_Str, _Pos, _Count);

}

这也许不是什么问题。

不过,下面这个也许会是个问题:

if (_Str[--_Pos] == '1')

set(_Num);

else if (_Str[_Pos] != '0')

_Xinv();

因为根据ctor的定义,我有可能传进来一个wstring的函数,那样的话就玩了。

stl也好,其他的C++库也好,在wide character方面往往出现漏洞,这是因为他们一般不会用到的原因。为什么我们就不能去修补这些错误呢?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航