sla*_*ppy 33 c++ string compile-time-constant
std::string提供了一种max_size()方法来确定它可以包含的最大元素数.
但是,为了计算字符串的最大长度,程序员必须创建一个(可能是空的)字符串对象.
如果这个类不需要程序员的任何信息,为什么不能max_size()作为编译时常量?字符串是否需要某种运行时信息来计算其最大大小?
Bo *_*son 21
一个原因是该max_size功能根本不是很有用,委员会认为尝试修复它并不值得.所以它就是这样,因为它是文档化界面的一部分.
参见图书馆缺陷报告#197:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3440.html#197
max_size()对于很多东西都没有用,现有的措辞对于max_size()可以用于的少数情况来说是足够清楚的.改变现有措辞的尝试都没有改进.
sla*_*ppy 18
std::string::max_size()std::allocator::max_size()引擎盖下的电话.
根据标准,20.9.6.1.10:
size_type max_size() const noexcept;返回:调用分配(N,0)可能成功的最大值N.
(另请参阅:allocator :: max_size)
从理论上讲,分配器实现可以计算出它可以通过系统调用分配的一块内存的最大大小.这有助于确定特定进程内字符串的最大可能大小.