πŸ–₯ НСочСвидныС возмоТности C++



Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ„ΠΈΡˆΠΊΠΈ C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто ΡƒΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ сущСствСнно ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ваш ΠΊΠΎΠ΄.



НачнСм с std::variant β€” позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ваш ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ бСзопасным ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с использованиСм void* ΠΈΠ»ΠΈ слоТных структур:

#include <variant>

#include <iostream>



std::variant<int, double, std::string> data = 42;

data = 3.14;

data = "Hello, C++";



std::visit([](auto&& arg) { std::cout << arg << '\n'; }, data);




Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ с constexpr ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ вычислСны компилятором Π²ΠΎ врСмя компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±ΠΎΠ»Π΅Π΅ эффСктивному ΠΈ быстрому ΠΊΠΎΠ΄Ρƒ:

constexpr int square(int x) {

return x * x;

// Ѐункция вычисляСт ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ числа

}



constexpr int result = square(5);

// Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вычисляСтся Π½Π° этапС компиляции




Под ΠΊΠΎΠ½Π΅Ρ† расскаТу ΠΏΡ€ΠΎ Structured Bindings β€” ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ°Ρ€Π°ΠΌΠΈ, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌΠΈ ΠΈ структурами, позволяя Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ значСния Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

std::tuple<int, double, char> getValues() {

return {42, 3.14, 'A'}

}



auto [intValue, doubleValue, charValue] = getValues();

std::cout << intValue << ", " << doubleValue << ", " << charValue << '\n';




Π•ΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ постС? Π”Π΅Π»ΠΈΡΡŒ ΠΌΠ½Π΅Π½ΠΈΠ΅ΠΌ Π² коммСнтариях!



πŸ“£ C++ Ready | #ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°