21 Haziran 2021 Pazartesi

Name Mangling - Sadece C++'ta Vardır

Giriş
Açıklaması şöyle. Yani Linker için gereklidir.
Name mangling is the encoding of function and variable names into unique names so that linkers can separate common names in the language. 
Eğer C kütüphanesini C++ ile kullanmak istersek name mangling olmasını istemeyiz. Bu durumda extern "C" kullanmak gerekir.

Örnek
Açıklaması şöyle
If you have ever looked at an objdump of a C++ program, you have likely seen something like this:

_ZN3foo3bar3bazI6sampleEE3quxvi3fo

This is a C++ mangled symbol, which encodes the namespaces, classes, and function/template arguments, using the Itanium ABI.

Specifically, it is for the following function:

void foo::bar::baz<sample>::qux(int, foo);
Rakamların açıklaması şöyle
- All mangled symbols start with _Z.
- Everything is case sensitive.
- All identifiers are encoded as <length><name>, where <length> is the positive length of <name> in base 10, so foo is encoded as 3foo, sample is encoded as 6sample, etc.

7 Haziran 2021 Pazartesi

std::chrono::year_month_day

Örnek
Şöyle yaparız. Bu kod UTC saate göre çalışır
#include <chrono>

bool IsTodayChristmas() {
    using namespace std::chrono;

    constexpr month_day Christmas = {December / 25};
    auto Now = year_month_day{floor<days>(system_clock::now())};

    // either
    return Now == Christmas / Now.year();
    // or
    return Now.month() / Now.day() == Christmas;
}
Yerel zamana göre çalışmak istersek şöyle yaparız
bool IsTodayChristmas() {
    using namespace std::chrono;

    constexpr month_day Christmas = {December / 25};
    auto Now_local = current_zone()->to_local(system_clock::now());
    auto Today = year_month_day{floor<days>(Now_local)};

    return Today == Christmas / Today.year();
}