【发布时间】:2012-11-28 10:38:57
【问题描述】:
为什么max_size 不是std::string 的静态成员?
这可以编译,但我认为所有字符串共有的属性只能通过字符串的实例访问,这很奇怪:
std::size_t max_size = std::string().max_size();
为什么要这样实现?
【问题讨论】:
为什么max_size 不是std::string 的静态成员?
这可以编译,但我认为所有字符串共有的属性只能通过字符串的实例访问,这很奇怪:
std::size_t max_size = std::string().max_size();
为什么要这样实现?
【问题讨论】:
为什么 max_size 不是 std::string 的静态成员?
因为 max_size 返回值取决于字符串实例内部使用的分配器实例。
【讨论】:
std::string documentation:“[...]在没有已知的编译器实现下,字符串(allocator<char>)的内存分配模型受其值的影响[...]”
std::string 是这样(因为它是根据 std::allocator<char> 定义的)。考虑可以定义 LoonyLoopyAllocatortypedef std::basic_string<char,std::char_traits<char>,LoonyLoopyAllocator<char>> LoonyLoopyString;。在这种情况下,max_size() 将不再提供相同的保证。std::string::size(),而不是max_size()。