2024-03-18 13:34:00
La fonctionnalité fuseau horaire (C++20) est essentiellement basée sur la fonctionnalité calendrier (C++20), elle-même basée sur la fonctionnalité chrono (C++11). Après l’aperçu de la terminologie de base du chrono dans le dernier article, j’introduis cette fois de nouveaux types de données en C++20.
Publicité
Durée
En C++14, les types de données comme std::chrono::seconds
pour les durées et les littéraux temporels correspondants tels que 5s
introduit. C++20 a ajouté de nouveaux types de données. Le tableau ci-dessous présente chacun par souci d’exhaustivité.
Souvent, la durée std::chrono::days
et la date du calendrier std::chrono::day
trompé. Il en va de même pour la durée std::chrono::years
et la date du calendrier std::chrono::year.
Rainer Grimm travaille depuis de nombreuses années en tant qu’architecte logiciel, responsable d’équipe et de formation. Il aime écrire des articles sur les langages de programmation C++, Python et Haskell, mais aime également intervenir fréquemment lors de conférences spécialisées. Sur son blog Modern C++, il parle intensément de sa passion C++.
Différences entre les périodes std::chrono::days
, std::chrono::years
et les types de calendrier std::chrono::day, std::chrono::year
C++20 a introduit deux nouveaux littéraux pour les nouveaux types de calendrier std::chrono::day
et std::chrono::yea
r ajouté. Les littéraux d
et y
se référer à un std::chrono::day
et std::chrono::year
.
- Le littéral jour représente un jour du mois et n’est pas spécifié s’il est hors plage [0, 255] mensonges.
- L’année littérale représente une année dans calendrier Grégorien et n’est pas précisé s’il est hors de portée [-32767, 32767] mensonges.
Le programme suivant illustre la différence entre std::chrono::days
et std::chrono::day
et par conséquent entre std::chrono::years
et std::chrono::year
.
// dayDays.cpp
#include
#include
int main() {
std::cout << 'n';
using namespace std::chrono_literals;
std::chrono::days days1
= std::chrono::day(30) - std::chrono::day(25); // (1)
std::chrono::days days2 = 30d - 25d; // (3)
if ( days1 == days2 &&
days1 == std::chrono::days(5)) std::cout << "Five daysn";
std::chrono::years years1
= std::chrono::year(2021) - std::chrono::year(1998); // (2)
std::chrono::years years2= 2021y - 1998y; // (4)
if ( years1 == years2 &&
years1 == std::chrono::years(23))
std::cout << "Twenty-three yearsn";
std::cout << 'n';
}
Qui possède deux objets de type std::chrono::day
soustrait (1), obtient un objet de type std::chrono::days
. Il en va de même pour cela std::chrono::year
(2) et std::chrono::years
. Grace à using
-Déclaration avec espace de noms std::chrono_literals
puis-je obtenir les littéraux de temps pour std::chrono::day
et std::chrono::year
préciser directement (3 et 4).
Inclure des littéraux
Il existe différentes manières d'inclure les littéraux.
using namespace std::literals
: contient tous les littéraux C++,using namespace std::chrono
: ferme tout l'espace de nomsstd::chrono
un,using namespace std::chrono_literals
: contient tous les littéraux de temps etusing namespace std::literals::chrono_literals
: inclut tous les littéraux de temps.
Le programme literals.cpp
montre l'utilisation des différents using
- La déclaration.
// literals.cpp
#include
#include
int main() {
{
using namespace std::literals;
std::string cppString = "C++ string literal"s; // (1)
auto aMinute = 60s; // (2)
// duration aHour = 0.25h + 15min + 1800s;
}
{
using namespace std::chrono;
// std::string cppString = "C++ string literal"s;
auto aMinute = 60s;
duration aHour = 0.25h + 15min + 1800s; // (3)
}
{
using namespace std::chrono_literals;
// std::string cppString = "C++ String literal"s;
auto aMinute = 60s;
// duration aHour = 0.25h + 15min + 1800s;
}
}
Les déclarations dans l'espace de noms std::literals
autoriser tous les littéraux intégrés tels que le littéral de chaîne ("C++ String-Literal "s
en 1) ou le temps littéral (60s
à la ligne 2). std::chrono::duration
ne peut pas être utilisé sans réserve. Au contraire, la déclaration using using namespace std::chrono
autorise les littéraux de temps et le type de données std::chrono::duration
(3) non qualifié pour utiliser : duration aHour = 0.25h + 15min + 1800s
. Grace à using
-Déclaration using namespace::std::chrono::literals
tous les littéraux de temps sont disponibles.
temps
Outre l'horloge et la période de temps, le troisième type de base était en C++11. std::chrono::time_point
.
template
class time_point;
UN std::chrono::time_point
dépend de l'horloge et de la durée. C++20 fournit des alias pour des moments supplémentaires.
A l'exception de std::chrono::steady_clock
vous pouvez définir un moment précis avec la période de temps spécifiée. Pour tout le monde sauf l'horloge std::chrono::file_clock
il est possible de le préciser pendant quelques secondes. Avec std::chrono::local_t
et std::chrono::system_clock
vous pouvez également les définir sur plusieurs jours.
Et après?
std::chrono::hh_mm_ss
est la durée écoulée depuis minuit, divisée en heures, minutes, secondes et fractions de secondes. Ce nouveau type de données en C++20 représente l'heure de la journée.
(moi)
#Temps #C20 #terminologie #chrono #base #avec #durée #instant
1710822866