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.