C++20'de Zaman: Zaman süresi ve zaman noktası ile temel kronometrik terminoloji

Adanali

Member


  1. C++20'de Zaman: Zaman süresi ve zaman noktası ile temel kronometrik terminoloji

Zaman dilimi işlevi (C++20) temel olarak takvim işlevine (C++20) dayanmaktadır ve bu da kronograf işlevine (C++11) dayanmaktadır. Son yazıda temel kronograf terminolojisine genel bir bakış yaptıktan sonra bu sefer C++20'deki yeni veri türlerini tanıtıyorum.

Duyuru









Süre


C++14'te aşağıdaki gibi veri türleri std::chrono::seconds süreler ve karşılık gelen zaman değişmezleri için 5s tanıtıldı. C++20 yeni veri türleri ekledi. Aşağıdaki tablo eksiksiz olması açısından her birini göstermektedir.








Çoğu zaman hava std::chrono::days ve takvim tarihi std::chrono::day yanlış. Aynı şey süre için de geçerli std::chrono::years ve takvim tarihi std::chrono::year.







Rainer Grimm uzun yıllardır yazılım mimarı, ekip ve eğitim yöneticisi olarak çalışmaktadır. C++, Python ve Haskell programlama dilleri üzerine makaleler yazmaktan hoşlanıyor, aynı zamanda özel konferanslarda sık sık konuşmaktan da hoşlanıyor. Modern C++ adlı blogunda C++ tutkusunu yoğun bir şekilde ele alıyor.







Zaman dilimleri arasındaki farklar std::chrono::days, std::chrono::years ve takvim türleri std::chrono::day, std::chrono::year

C++20, yeni takvim türleri için iki yeni değişmez değeri tanıttı std::chrono::day VE std::chrono::yeaEkledim. Gerçek olanlar d VE y birine bakın std::chrono::day VE std::chrono::year.








  • Gün değişmezi ayın bir gününü temsil eder ve aralık dışındaysa belirtilmez [0, 255] yalanlar.
  • Gerçek yıl, Gregoryen takviminde bir yılı temsil eder ve aralığın dışında olduğunda belirtilmez. [-32767, 32767] yalanlar.
Aşağıdaki program arasındaki farkı göstermektedir: std::chrono::days VE std::chrono::day ve dolayısıyla arasında std::chrono::years VE std::chrono::year.


// dayDays.cpp

#include <iostream>&#13;
#include <chrono>&#13;
&#13;
int main() {&#13;
&#13;
std::cout << 'n';&#13;
&#13;
using namespace std::chrono_literals; &#13;
&#13;
std::chrono::days days1 &#13;
= std::chrono::day(30) - std::chrono::day(25); // (1)&#13;
std::chrono::days days2 = 30d - 25d; // (3)&#13;
if ( days1 == days2 && &#13;
days1 == std::chrono::days(5)) std::cout << "Five daysn";&#13;
&#13;
std::chrono::years years1 &#13;
= std::chrono::year(2021) - std::chrono::year(1998); // (2)&#13;
std::chrono::years years2= 2021y - 1998y; // (4)&#13;
if ( years1 == years2 && &#13;
years1 == std::chrono::years(23)) &#13;
std::cout << "Twenty-three yearsn";&#13;
&#13;
std::cout << 'n';&#13;
&#13;
}&#13;



Kimin iki tip nesnesi var std::chrono::day (1)'i çıkarır, türünde bir nesne alır std::chrono::days. Aynı şey bunun için de geçerli std::chrono::year (2) e std::chrono::years. sayesinde using-Ad alanı içeren bildirim std::chrono_literals Kelimenin tam anlamıyla zamanım olabilir std::chrono::day VE std::chrono::year doğrudan belirtin (3 ve 4).

Değişmez değerleri dahil et


Değişmezleri dahil etmenin birkaç yolu vardır.

  • using namespace std::literals: tüm C++ değişmezlerini içerir,
  • using namespace std::chrono: Ad alanının tamamını kapatır std::chrono A,
  • using namespace std::chrono_literals: Tüm zamanların değişmez değerlerini içerir ve
  • using namespace std::literals::chrono_literals: Tüm zamanların değişmez değerlerini içerir.
program literals.cpp çeşitli kullanımını gösterir using-İfadeler.


// literals.cpp&#13;
&#13;
#include <chrono>&#13;
#include <string>&#13;
&#13;
int main() {&#13;
&#13;
{&#13;
using namespace std::literals;&#13;
&#13;
std::string cppString = "C++ string literal"s; // (1)&#13;
auto aMinute = 60s; // (2)&#13;
// duration aHour = 0.25h + 15min + 1800s;&#13;
}&#13;
&#13;
{&#13;
using namespace std::chrono;&#13;
&#13;
// std::string cppString = "C++ string literal"s;&#13;
auto aMinute = 60s;&#13;
duration aHour = 0.25h + 15min + 1800s; // (3)&#13;
}&#13;
&#13;
{&#13;
using namespace std::chrono_literals;&#13;
&#13;
// std::string cppString = "C++ String literal"s;&#13;
auto aMinute = 60s;&#13;
// duration aHour = 0.25h + 15min + 1800s;&#13;
}&#13;
&#13;
}


Ad alanındaki bildirimler std::literals tüm gömülü değişmezlere dize değişmezi olarak izin ver ("C++ String-Literal "s 1) veya gerçek zaman (60s 2. satırda). std::chrono::duration herhangi bir nitelik olmadan kullanılamaz. Buna karşılık, kullanım using namespace std::chrono zaman değişmezlerine ve veri türüne izin verir std::chrono::duration (3) kullanıma uygun değil: duration aHour = 0.25h + 15min + 1800s. sayesinde using-Beyanname using namespace::std::chrono::literals tüm zamanların değişmezleri mevcuttur.

zaman


C++11'de saat ve zaman dilimine ek olarak üçüncü temel tür de mevcuttu. std::chrono::time_point.


template<typename Clock, &#13;
typename Duration = typename Clock::duration> &#13;
class time_point;


A std::chrono::time_point Saate ve süreye bağlıdır. C++20 ek zaman noktaları için takma adlar sağlar.








Dışında std::chrono::steady_clock belirtilen zaman dilimine sahip bir zaman noktasını tanımlayabilirsiniz. Saat dışındaki herkes için std::chrono::file_clock saniye cinsinden belirtebilirsiniz. İle std::chrono::local_t VE std::chrono::system_clock bunları günlere göre de ayarlayabilirsiniz.

Sıradaki ne?


std::chrono::hh_mm_ss gece yarısından bu yana geçen sürenin saat, dakika, saniye ve saniyenin kesirlerine bölünmesiyle elde edilen süredir. C++20'deki bu yeni veri türü günün saatini temsil eder.


(kendim)



Haberin Sonu
 
Üst