C++ 在分配器的特殊情况下std::basic_字符串中的错误

C++ 在分配器的特殊情况下std::basic_字符串中的错误,c++,c++11,allocator,C++,C++11,Allocator,我使用g++并定义了一个自定义分配器,其中size\u类型为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;

我使用g++并定义了一个自定义分配器,其中size\u类型为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;
但是所有的算术都是字节算术,因此应该有一个值4096的
\uu pagesize
变成了0(因为4096是256的倍数),我们有一个“除以0”的异常(代码挂起)


问题不是我该怎么做,而是我该如何要求对上述代码进行更正?谁的?(我可能会实施这些更正)。

在您可以请求或建议更改类似内容之前,您必须建立一个强有力的案例,证明确实存在需要修复的问题。我认为可能没有

问题是:在什么情况下将
size\u类型定义为无符号字符是合法的(或有用的)?我不知道标准中有任何明确禁止这种选择的内容。它被定义为

无符号整数类型-可以表示分配模型中最大对象的大小的类型

根据s3.9.1,无符号字符肯定是一种无符号整数类型。有趣

那么它有用吗?很明显,你似乎这么认为,但我不确定你的理由是否充分。你可以努力提供证据证明这是一个值得解决的问题

因此,在我看来,这个过程是:

  • 确定
    unsigned char
    是否打算作为有效选项包含在标准中,或者是否应该将其排除在外,或者只是被忽略了
  • 针对存在问题的每个编译器,向团队提出“标准不合规”问题,提供良好的推理和重新编译案例
  • 如果您有能力修复此问题,请考虑提交修补程序

  • 或者您可以只使用
    短无符号int
    。我会的。

    示例代码不会更新
    \uuuPageSize
    ,因此您的语句“\uPageSize…变为”挂起在空中,不受支持。为什么不发布相关代码呢?@Cheers and Hth.-Alf库代码声明
    const size\u type\u pagesize
    。为什么size\u type定义为char?鉴于libstdc++的
    basic\u string
    不符合标准,这可能是白费力气。你也尝试过吗?@Zacrath标准库允许用户定义的分配器限制联合对象的大小,并定义自己的大小类型,这大概是因为有合理的需要,而不仅仅是出于对过度配置的喜爱。根据我的需要,我已经用一个简单的{if}注释掉了代码(std::numeric_limits::max()>=_pagesize_def){const size_type__extra=_pagesize-_adj_size%_pagesize;_容量+=_extra/sizeof(_图表)}因此,我要问的是,我应该在哪里申请该补丁。根据标准符合性等事实,很明显,这只是一个简单的错误,与任何标准或其他考虑无关,只是为了纠正并继续进行更有趣的工作和争论。此外,如果页面大小>65536,该错误将以简短的形式再次出现。试试看。