std::ranges:: ssize
|
Défini dans l'en-tête
<ranges>
|
||
|
Défini dans l'en-tête
<iterator>
|
||
|
inline
namespace
/* unspecified */
{
inline
constexpr
/* unspecified */
ssize
=
/* unspecified */
;
|
(depuis C++20)
(objet de point de personnalisation) |
|
|
Signature d'appel
|
||
|
template
<
class
T
>
requires
/* voir ci-dessous */
|
(depuis C++20) | |
Calcule le nombre d'éléments dans t en temps constant, et convertit le résultat en un type signé.
Étant donné la sous-expression dont t désigne l'objet résultat (éventuellement matérialisé ) comme E :
- Si ranges:: size ( t ) est mal formé, ranges :: ssize ( E ) est également mal formé.
-
Sinon, soit
Signeddéfini commemake-signed-like-t < decltype ( ranges:: size ( t ) ) > :-
Si
std::ptrdiff_t
est plus large que
Signed, ranges :: ssize ( E ) est équivalent en expression à static_cast < std:: ptrdiff_t > ( ranges:: size ( t ) ) . - Sinon, ranges :: ssize ( E ) est équivalent en expression à static_cast < Signed > ( ranges:: size ( t ) ) .
-
Si
std::ptrdiff_t
est plus large que
Table des matières |
Objets de point de personnalisation
Le nom
ranges::ssize
désigne un
objet de point de personnalisation
, qui est un
objet fonction
const d'un type de classe
littéral
semiregular
. Voir
CustomizationPointObject
pour plus de détails.
Notes
Si ranges :: ssize ( e ) est valide pour une expression e , le type de retour est un type similaire à un entier signé .
Exemple
#include <array> #include <iostream> #include <ranges> #include <type_traits> int main() { std::array arr{1, 2, 3, 4, 5}; auto s = std::ranges::ssize(arr); std::cout << "ranges::ssize(arr) = " << s << '\n' << "ranges::ssize is " << (std::is_signed_v<decltype(s)> ? "signed" : "unsigned") << '\n'; std::cout << "reversed arr: "; for (--s; s >= 0; --s) std::cout << arr[s] << ' '; std::cout << "\n" "s = " << s << '\n'; }
Sortie :
ranges::ssize(arr) = 5 ranges::ssize is signed reversed arr: 5 4 3 2 1 s = -1
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3403 | C++20 |
ranges::size
fonctionnait pour certains types non-range mais
ranges::ssize
ne fonctionnait pas
|
rendu fonctionnel |
Voir aussi
|
(C++20)
|
retourne un entier égal à la taille d'un intervalle
(objet point de personnalisation) |
|
(C++20)
|
spécifie qu'un intervalle connaît sa taille en temps constant
(concept) |
|
(C++20)
|
retourne la distance entre un itérateur et un sentinelle, ou entre le début et la fin d'un intervalle
(objet fonction algorithme) |
|
(C++17)
(C++20)
|
retourne la taille d'un conteneur ou d'un tableau
(fonction template) |