std:: ptrdiff_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Basic types | |||||||||||||||||||||
| Fixed width integer types (C++11) | |||||||||||||||||||||
| Fixed width floating-point types (C++23) | |||||||||||||||||||||
|
|||||||||||||||||||||
| Numeric limits | |||||||||||||||||||||
| C numeric limits interface | |||||||||||||||||||||
| Runtime type information | |||||||||||||||||||||
|
|||||||||||||||||||||
|
Definido en el encabezado
<cstddef>
|
||
|
typedef
/*implementation-defined*/
ptrdiff_t
;
|
||
std::ptrdiff_t
es el tipo entero con signo del resultado de restar dos punteros.
|
El ancho en bits de
|
(desde C++11) |
Contenidos |
Notas
std::ptrdiff_t
se utiliza para
aritmética de punteros
e indexación de arreglos, si son posibles valores negativos. Los programas que utilizan otros tipos, como
int
, pueden fallar en, por ejemplo, sistemas de 64 bits cuando el índice excede
INT_MAX
o si depende de aritmética modular de 32 bits.
Al trabajar con la biblioteca de contenedores de C++, el tipo adecuado para la diferencia entre iteradores es el typedef miembro
difference_type
, que frecuentemente es sinónimo de
std::ptrdiff_t
.
Solo se pueden restar entre sí punteros a elementos del mismo arreglo (incluyendo el puntero una posición después del final del arreglo).
Si un arreglo es tan grande (mayor que
PTRDIFF_MAX
elementos, pero menor que
SIZE_MAX
bytes), que la diferencia entre dos punteros podría no ser representable como
std::ptrdiff_t
, el resultado de restar dos de estos punteros es indefinido.
Para arreglos de caracteres más cortos que
PTRDIFF_MAX
,
std::ptrdiff_t
actúa como la contraparte con signo de
std::size_t
: puede almacenar el tamaño del arreglo de cualquier tipo y es, en la mayoría de plataformas, sinónimo de
std::intptr_t
.
No está especificado si la declaración de
std::ptrdiff_t
está disponible en cualquier otro encabezado de la biblioteca estándar. Una implementación puede evitar introducir este nombre incluso cuando el estándar requiere
std::ptrdiff_t
para ser utilizado.
Implementación posible
// válido desde C++11 using ptrdiff_t = decltype(static_cast<int*>(nullptr) - static_cast<int*>(nullptr)); |
Ejemplo
#include <cstddef> #include <iostream> int main() { const std::size_t N = 10; int* a = new int[N]; int* end = a + N; for (std::ptrdiff_t i = N; i > 0; --i) std::cout << (*(end - i) = i) << ' '; std::cout << '\n'; delete[] a; }
Salida:
10 9 8 7 6 5 4 3 2 1
Véase también
|
tipo entero sin signo devuelto por el operador
sizeof
(typedef) |
|
|
desplazamiento en bytes desde el inicio de un tipo de
diseño estándar
hasta el miembro especificado
(macro de función) |
|
|
Documentación de C
para
ptrdiff_t
|
|