是std :: vector :: reserve(0); 法律?

NPS*_*NPS 8 c++ stl vector c++11

std::vector::reserve(0);合法的,哪些会怎么做呢?

Jer*_*fin 22

没有什么可以禁止的.效果reserve是:

在reserve()之后,如果重新分配,capacity()大于或等于reserve的参数; 并且等于capacity()的先前值.当且仅当当前容量小于reserve()的参数时,才会发生重新分配.1

因为值capacity()永远不会小于0(它是无符号的),所以它永远不会有任何影响; 它永远不会导致重新分配.


1. c ++标准,[vector.capacity]


cdh*_*wie 7

是的,这是一个合法的无操作.

如果new_cap大于当前值capacity(),则分配新存储,否则该方法不执行任何操作.

(来源,强调我的.)

因为capacity()将始终> = 0(由于size_type无符号),传递零保证什么都不做.