variable utilizan tipos que programacion para las ejemplos constantes c++ string compile-time-constant

c++ - utilizan - variable en programacion



¿Por qué std:: string:: max_size no es una constante en tiempo de compilación? (4)

Esto también debería funcionar:

enum : std::string::size_type { npos = std::string::size_type(-1), max_size = npos - 1 };

std::string proporciona un método max_size() para determinar la cantidad máxima de elementos que puede contener.

Sin embargo, para calcular la longitud máxima de una cadena en general, el programador debe crear un objeto de cadena (posiblemente vacío).

Si esta clase no necesita ninguna información del programador, ¿por qué no está disponible max_size() como una constante de tiempo de compilación? ¿Hay algún tipo de información de tiempo de ejecución necesaria para que una cadena determine su tamaño máximo?


La llamada a max_size() se delega al asignador utilizado para el contenedor.

En teoría, un asignador muy inteligente podría calcular su max_size en tiempo de ejecución, por ejemplo, dependiendo de la RAM disponible.


Una razón es que la función max_size no es muy útil en absoluto, y el comité no cree que valga la pena tratar de solucionarlo. Por lo tanto, se deja tal como está, porque forma parte de la interfaz documentada.

Consulte el informe de defectos de la biblioteca n. ° 197:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3440.html#197

max_size () no es útil para muchas cosas, y la redacción existente es lo suficientemente clara para los pocos casos en los que se puede usar max_size (). Ninguno de los intentos de cambiar la redacción existente fue una mejora.


std::string::max_size() llama a std::allocator::max_size() debajo del capó.

De acuerdo con el estándar, 20.9.6.1.10:

size_type max_size() const noexcept;

Devuelve: el valor N más grande para el cual la asignación de llamadas (N, 0) puede tener éxito.

(Ver también: allocator::max_size )

Teóricamente, una implementación de asignador podría calcular el tamaño máximo de una porción de memoria que podría asignar a través de un syscall. Esto ayudaría a determinar el tamaño más grande posible para una cadena, dentro de un proceso específico.