最近我注意到以下陈述是不正确的std::string s
。
s.max_size() == s.get_allocator().max_size();
我发现这很有趣,默认情况下std::string
将使用std::allocator<char>
理论限制为size_type(-1)
(是的,我知道我假设是 2 的补码,但这与实际问题无关)。我知道实际的限制会比这个少得多。在典型的 32 位 x86 系统上,内核将占用 2GB(可能是 1GB)的地址空间,而实际上限要小得多。
无论如何,GNU libstdc++std::basic_string<>::max_size()
似乎返回相同的值,而不管它使用的分配器说什么(类似于1073741820
)。
所以问题仍然存在,为什么不std::basic_string<>::max_size()
直接返回get_allocator().max_size()
?在我看来,这是假设的上限。如果分配不足,它只会抛出 a std::bad_alloc
,那么为什么不尝试呢?
这比其他任何事情都更令人好奇,我只是想知道为什么这两者至少在这个实现中是分开定义的。