Temps en C++20 : terminologie chrono de base avec durée et instant

Temps en C++20 : terminologie chrono de base avec durée et instant

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é

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::year 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).

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 noms std::chrono un,
  • using namespace std::chrono_literals: contient tous les littéraux de temps et
  • using 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.

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.

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)

Vers la page d'accueil



#Temps #C20 #terminologie #chrono #base #avec #durée #instant
1710822866

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.