【发布时间】:2012-10-19 17:16:54
【问题描述】:
std::string 提供了一个max_size() 方法来确定它可以包含的最大元素数。
但是,一般来说,要计算出字符串的最大长度,程序员必须创建一个(可能为空的)字符串对象。
如果这个类不需要程序员提供任何信息,为什么max_size() 不能作为编译时常量使用?字符串计算其最大大小是否需要某种运行时信息?
【问题讨论】:
-
您需要创建一个空字符串的逻辑不成立(因为底层分配器持有此信息)。 max_size() 也不是一个常数值。它是当前可以分配的最大值(运行时取决于分配器的状态)。
-
@Loki:你能为你的陈述提供参考吗?我问是因为我很确定你错了(
max_size应用于字符串;分配器是另一回事)。 -
@Nemo:标准中没有任何内容说它是恒定的。不过,在某些实现中它可能是恒定的。 (我在这里假设 -> )如果标准委员会希望它成为一个常量,他们会使其成为像
std::string::npos这样的 const 成员变量,但为了提供更多的灵活性机会,它是一个方法。 -
@LokiAstari:“如果标准委员会想要它......他们会......”我猜当他们忘记声明
std::vector的内存是连续的时你不在。那么异常规范呢?他们不是神,他们会犯错误。 C++03 标准只说 (23.1) “size()of the maximum possible container”并且它应该有 O(1)。这很模糊,IYAM,并且留下了很多猜测它的含义的空间。
标签: c++ string compile-time-constant