我使用g ++并且我定义了一个自定义分配器,其中size_type是byte。
我正在使用basic_string
来创建自定义字符串。
" basic_string.tcc"代码行为错误,因为在
的代码中_S_create(size_type __capacity, size_type __old_capacity, const _Alloc& __alloc)
代码检查
const size_type __extra = __pagesize - __adj_size % __pagesize;
但是所有算术都是字节算术,所以__pagesize
应该有一个值4096,变为0(因为4096是256的倍数),我们有一个"除以0"异常(代码挂起)。
问题不在于我该怎么做,但我怎么能要求对上述代码进行更正?从谁 ? (我可以实施这些更正)。
答案 0 :(得分:3)
在您要求或建议对此类内容进行更改之前,您必须建立一个强有力的案例,确实存在需要修复的问题。在我看来,可能没有。
问题是:在哪种情况下将size_type
定义为unsigned char是合法的(或有用的)?我不知道标准中有什么特别不允许这种选择。它被定义为
无符号整数类型 - 可以表示分配模型中最大对象大小的类型。
根据s3.9.1,unsigned char
肯定是unsigned integer type
。有趣。
它有用吗?很明显,你似乎这么认为,但我不确定你的情况是否已经强烈推出。您可以提供证据证明这是一个值得解决的问题。
所以在我看来这个过程是:
unsigned char
是否有意作为标准中的有效选择,或者是否应将其排除,或者是否被忽略。或者你可以改用short unsigned int
。我愿意。