Moderní klíčová slova v C++: Požehnání nebo prokletí?

Od příchodu standardu C++11 jsme dostali do rukou několik elegantních a čitelnějších klíčových slov pro logické a bitové operace, jako jsou and, or, bitand a další. Tyto nové alternativy ke klasickým symbolům jako &&, || nebo & přinesly do jazyka svěží vítr. Místo tradičního zápisu:

if (x && y || z) {
    // ...
}

můžeme nyní psát:

if (x and y or z) {
    // ...
}

Výsledek? Kód je čistší, čitelnější a připomíná moderní programovací jazyky. V mnoha projektech, kde se tato klíčová slova používala, se čitelnost výrazně zlepšila. Na první pohled tedy skvělý krok vpřed.


Ale teď přichází háček…

S těmito klíčovými slovy se však do jazyka dostala i jedna z nejbizarnějších možností zápisu, která může způsobit chaos. Věděli jste, že následující kód je zcela validní C++?

void f(int and x) {
    // ...
}

void g(int bitand x) {
    // ...
}

Ano, and je jen jiný zápis pro && a bitand pro &, ale někdo se rozhodl, že by bylo „dobrý nápad“ povolit jejich použití i v deklaracích proměnných. Výsledek? Kód, který je noční můrou pro čitelnost a údržbu.


Co s tím?

Tato syntaxe je sice součástí standardu, ale její existence vyvolává otázky: Proč? Kdo to chtěl? A můžeme to prosím odstranit? Pro většinu vývojářů je to zbytečná komplikace, která spíše škodí, než pomáhá.

Co si o tom myslíte vy? Měli bychom tuto možnost v budoucích standardech odstranit, nebo je to jen drobná kuriozita, se kterou se dá žít? Diskutujme!

ai (1) architekt (1) Bash (2) bitwig (2) bitwig6 (1) c++ (54) cheatsheet (1) clang-format (1) class (1) cmake (3) cmake-format (1) conan (2) constexpr if (1) cz (2) daw (2) decltype(x) (1) desktop (2) duševní zdraví (1) email (1) emoce (4) enum (1) enum class (1) functor (1) git (1) gnome (4) gnome-extension (1) helloworld (2) hranice (1) js (1) keyboard (2) linux (6) llm (1) lvalue (1) metodika řízení (2) midi (2) modern c++ (48) motivace (1) music (6) music production (1) native instruments (1) nodiscard (1) noexcept (1) operator (1) osobnost (1) osobní hranice (1) override (1) package manager (1) Perfect Forwarding (1) plugin (1) poděkování (1) polymorfism (1) prospěch (1) psyché (2) python (2) rspamd (1) rvalue (1) růst (2) scale (2) self-stress (1) sociální sítě (1) software (1) spam (1) std (28) std::accumulate (1) std::async (2) std::divides (1) std::filesystem::path (2) std::forward (1) std::future (3) std::istream_iterator (1) std::latch (1) std::lerp (1) std::minus (1) std::modulus (1) std::multiplies (1) std::negate (1) std::ostream_iterator (1) std::packaged_task (1) std::partition (1) std::partition_copy (1) std::plus (1) std::promise (2) std::shiftleft (1) std::shuffle (1) std::transform (1) std::tuple (1) std::variant (1) std::views::transform (1) std::visit (1) strach (1) strategie (1) synthesizer (1) toxic (2) toxicita (1) toxík (1) using (2) vztah k sobě (1) vztahy (3) vývoj (1) zdraví (2)