C++11stlintermediate
Duration Typedefs (C++11 Addition)
C++11 · Modern Revolution · Compiler flag: -std=c++11
Explanation
Predefined `std::chrono::duration` aliases for common time units: `nanoseconds`, `microseconds`, `milliseconds`, `seconds`, `minutes`, and `hours`, providing convenient and readable time specifications.
Real-World Scenario
Set timeouts, delays, and intervals using expressive, self-documenting duration types.
Quick Snippet
snippet.cpp
#include <chrono>
std::chrono::nanoseconds ns(1000);
std::chrono::microseconds us(500);
std::chrono::milliseconds ms(100);
std::chrono::seconds s(5);
std::chrono::minutes m(2);
std::chrono::hours h(1);
auto total = std::chrono::duration_cast<std::chrono::seconds>(h + m + s); // 3725sFull Example
duration_typedefs.cpp
// CodeNebula - C++11 Example: Duration Typedefs
// Compile: g++ -std=c++11 -Wall -Wextra -o example duration_typedefs.cpp
// Demonstrates the predefined duration typedefs: nanoseconds, microseconds,
// milliseconds, seconds, minutes, hours — and conversions between them.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
// Construct durations from each typedef
nanoseconds ns(1500000000LL); // 1.5 billion nanoseconds
microseconds us(1500000); // 1.5 million microseconds
milliseconds ms(1500); // 1500 milliseconds
seconds s(90); // 90 seconds
minutes m(3); // 3 minutes
hours h(2); // 2 hours
std::cout << "=== Raw counts ===\n";
std::cout << "nanoseconds: " << ns.count() << " ns\n";
std::cout << "microseconds: " << us.count() << " us\n";
std::cout << "milliseconds: " << ms.count() << " ms\n";
std::cout << "seconds: " << s.count() << " s\n";
std::cout << "minutes: " << m.count() << " min\n";
std::cout << "hours: " << h.count() << " h\n\n";
// duration_cast: narrowing (truncates toward zero)
std::cout << "=== Conversions (duration_cast) ===\n";
auto ns_to_ms = duration_cast<milliseconds>(ns);
std::cout << ns.count() << " ns = " << ns_to_ms.count() << " ms\n";
auto s_to_min = duration_cast<minutes>(s);
std::cout << s.count() << " s = " << s_to_min.count() << " min\n";
auto h_to_s = duration_cast<seconds>(h);
std::cout << h.count() << " h = " << h_to_s.count() << " s\n\n";
// Widening conversion is implicit (no cast needed)
nanoseconds widened = ms; // milliseconds -> nanoseconds
std::cout << "1500 ms = " << widened.count() << " ns (implicit)\n\n";
// Arithmetic on durations
auto total = h + m + s;
auto total_s = duration_cast<seconds>(total);
std::cout << "2h + 3min + 90s = " << total_s.count() << " s\n";
// Comparison
std::cout << "90s == 1min? " << std::boolalpha << (seconds(90) == minutes(1))
<< "\n";
std::cout << "90s > 1min? " << (seconds(90) > minutes(1)) << "\n";
return 0;
}
// Expected output:
// === Raw counts ===
// nanoseconds: 1500000000 ns
// microseconds: 1500000 us
// milliseconds: 1500 ms
// seconds: 90 s
// minutes: 3 min
// hours: 2 h
//
// === Conversions (duration_cast) ===
// 1500000000 ns = 1500 ms
// 90 s = 1 min
// 2 h = 7200 s
//
// 1500 ms = 1500000000 ns (implicit)
//
// 2h + 3min + 90s = 7470 s
// 90s == 1min? false
// 90s > 1min? true
Run command
g++ -std=c++11 -Wall -Wextra -o example duration_typedefs.cpp