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 | |||||||||||||||||||||
|
|||||||||||||||||||||
|
Défini dans l'en-tête
<cstddef>
|
||
|
typedef
/*implementation-defined*/
ptrdiff_t
;
|
||
std::ptrdiff_t
est le type entier signé du résultat de la soustraction de deux pointeurs.
|
La largeur en bits de
|
(depuis C++11) |
Table des matières |
Notes
std::ptrdiff_t
est utilisé pour
l'arithmétique des pointeurs
et l'indexation des tableaux, si des valeurs négatives sont possibles. Les programmes qui utilisent d'autres types, tels que
int
, peuvent échouer sur, par exemple, les systèmes 64 bits lorsque l'index dépasse
INT_MAX
ou s'il repose sur une arithmétique modulaire 32 bits.
Lorsque vous travaillez avec la bibliothèque de conteneurs C++, le type approprié pour la différence entre les itérateurs est le typedef membre
difference_type
, qui est souvent synonyme de
std::ptrdiff_t
.
Seuls les pointeurs vers des éléments d'un même tableau (y compris le pointeur pointant après la fin du tableau) peuvent être soustraits l'un de l'autre.
Si un tableau est si grand (plus de
PTRDIFF_MAX
éléments, mais moins de
SIZE_MAX
octets), que la différence entre deux pointeurs peut ne pas être représentable comme
std::ptrdiff_t
, le résultat de la soustraction de deux tels pointeurs est indéfini.
Pour les tableaux de caractères plus courts que
PTRDIFF_MAX
,
std::ptrdiff_t
agit comme la contrepartie signée de
std::size_t
: il peut stocker la taille du tableau de n'importe quel type et est, sur la plupart des plateformes, synonyme de
std::intptr_t
.
Il n'est pas spécifié si la déclaration de
std::ptrdiff_t
est disponible dans tout autre en-tête de la bibliothèque standard. Une implémentation peut éviter d'introduire ce nom même lorsque la norme exige l'utilisation de
std::ptrdiff_t
.
Implémentation possible
// valide depuis C++11 using ptrdiff_t = decltype(static_cast<int*>(nullptr) - static_cast<int*>(nullptr)); |
Exemple
#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; }
Sortie :
10 9 8 7 6 5 4 3 2 1
Voir aussi
|
type entier non signé retourné par l'opérateur
sizeof
(typedef) |
|
|
décalage en octets depuis le début d'un type
standard-layout
jusqu'au membre spécifié
(macro fonction) |
|
|
Documentation C
pour
ptrdiff_t
|
|