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.
// dayDays.cpp
#include <iostream>
#include <chrono>
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';
}
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.
// literals.cpp
#include <chrono>
#include <string>
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;
}
}
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,
typename Duration = typename Clock::duration>
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