> 'Ratio' kütüphanesi : 'Run-time' ile hiç bir alakası yoktur. Bünyesindeki her şey bir şablondur. >> Pekiştirici örnekler: * Örnek 1, //.. int main() { /* # OUTPUT # */ // 'num' isimli değişken, sadeleştirme sonucunda paydaki kısım. Sadeleştirme otomati olarak yapılmakta. constexpr auto x{ std::ratio<1, 5>::num }; // 'x' is 1 constexpr auto y{ std::ratio<8, 24>::num }; // 'y' is 1 // 'den' isimli değişken, sadeleştirme sonucunda paydadaki kısım. Sadeleştirme otomati olarak yapılmakta. constexpr auto z{ std::ratio<1, 5>::den }; // 'z' is 5 constexpr auto t{ std::ratio<8, 24>::den }; // 't' is 3 return 0; } * Örnek 2, //.. int main() { /* # OUTPUT # St5ratioILl1ELl5EE */ // 'type', kendisinin türünün karşılığıdır. std::cout << typeid( std::ratio<1, 5>::type ).name() << "\n"; return 0; } * Örnek 3, //.. int main() { /* # OUTPUT # St5ratioILl1ELl100EE => 1 / 100 */ std::cout << typeid( std::centi::type ).name() << " => " << std::centi::num << " / " << std::centi::den << "\n"; // 'std::centi', 'std::ratio<100,1>' açılımının tür eş ismidir. return 0; } * Örnek 4, //.. class de{ public: constexpr de(long long x) : mx{x} {} friend std::ostream& operator<< (std::ostream& os, de x) { auto s{ std::to_string(x.mx) }; if( s[0] == '-' ) { os << "-"; s.erase(0, 1); // Sadece ilk karakteri silecektir. } auto len{ s.length() }; for(size_t i{}; i < len; ++i) { os << s[i]; if( auto n = len - 1 - i; n && n % 3 == 0 ) { os << "."; } } return os; } private: long long mx; }; template std::ostream& operator<<(std::ostream& os, std::ratio r) { return os << de{r.num} << " / " << de{r.den}; } int main() { /* # OUTPUT # deci : 1 / 10 centi : 1 / 100 milli : 1 / 1.000 micro : 1 / 1.000.000 nano : 1 / 1.000.000.000 pico : 1 / 1.000.000.000.000 femto : 1 / 1.000.000.000.000.000 atto : 1 / 1.000.000.000.000.000.000 exa : 1.000.000.000.000.000.000 / 1 peta : 1.000.000.000.000.000 / 1 tera : 1.000.000.000.000 / 1 giga : 1.000.000.000 / 1 mega : 1.000.000 / 1 kilo : 1.000 / 1 hecto : 100 / 1 deca : 10 / 1 */ std::cout << "deci : " << std::deci{} << "\n"; std::cout << "centi : " << std::centi{} << "\n"; std::cout << "milli : " << std::milli{} << "\n"; std::cout << "micro : " << std::micro{} << "\n"; std::cout << "nano : " << std::nano{} << "\n"; std::cout << "pico : " << std::pico{} << "\n"; std::cout << "femto : " << std::femto{} << "\n"; std::cout << "atto : " << std::atto{} << "\n"; std::cout << "exa : " << std::exa{} << "\n"; std::cout << "peta : " << std::peta{} << "\n"; std::cout << "tera : " << std::tera{} << "\n"; std::cout << "giga : " << std::giga{} << "\n"; std::cout << "mega : " << std::mega{} << "\n"; std::cout << "kilo : " << std::kilo{} << "\n"; std::cout << "hecto : " << std::hecto{} << "\n"; std::cout << "deca : " << std::deca{} << "\n"; return 0; } * Örnek 5, //.. constexpr std::intmax_t a{17}; constexpr std::intmax_t b{23}; int main() { /* # OUTPUT # Result : 818 / 391 */ auto num{ std::ratio_add< std::ratio, std::ratio >::num }; auto den{ std::ratio_add< std::ratio, std::ratio >::den }; std::cout << "Result : " << num << " / " << den << "\n"; return 0; } * Örnek 6, //.. constexpr std::intmax_t a{17}; constexpr std::intmax_t b{23}; int main() { /* # OUTPUT # Result : 1 */ // auto result{ std::ratio_less_v< std::ratio, std::ratio > }; auto result{ std::ratio_less< std::ratio, std::ratio >::value }; std::cout << "Result : " << result << "\n"; return 0; }