C++/Fampidirana ny C++ Maoderina

< C++

Torolàlana: Kinova C++ Farany 5

hanova

C++11, navoaka tamin'ny taona 2011, dia nampiditra endri-javatra maro izay nanatsara ny fiteny C++ ho maoderina kokoa.

  • auto : Mamela ny compilateur hamantatra ho azy ny karazana fanova.
auto x = 10;  // x dia int
  • Boribory mifototra amin'ny elanelana (Range-based for loops) : Manamora ny fandehanana amin'ny containers.
std::vector<int> vec = {1, 2, 3};
for (int n : vec) {
    std::cout << n << std::endl;
}
  • Lambdas : Asan'ny tsy misy anarana ampiasaina an-tserasera.
auto fanampiana = [](int a, int b) { return a + b; };
std::cout << fanampiana(2, 3);  // Mamerina 5
  • nullptr : Type-safe null pointer.
int* ptr = nullptr;
  • std::unique_ptr sy std::shared_ptr : Smart pointers ho an'ny fitantanana memoire tsara kokoa.
std::unique_ptr<int> p = std::make_unique<int>(10);
  • Move semantics : Manatsara ny fitantanana loharano amin'ny alalan'ny famindrana fananana.
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = std::move(v1);

C++14, navoaka tamin'ny taona 2014, dia nampiditra fanatsarana kely sy fanitsiana biby amin'ny endri-javatra nampidirina tamin'ny C++11.

  • Generic lambdas : Mamela ny lambda expressions hamantatra ny karazana parameter.
auto lambda = [](auto a, auto b) { return a + b; };
std::cout << lambda(1, 2);   // Mamerina 3
std::cout << lambda(1.5, 2.5); // Mamerina 4
  • decltype(auto) : Mitahiry ny karazana marina napetraky ny auto, anisan'izany ny references.
int x = 10;
decltype(auto) y = (x);  // y dia int& (reference an'ny x)
  • std::make_unique : Fomba mora amin'ny famoronana unique_ptr.
auto p = std::make_unique<int>(42);
  • Binary literals : Mamela ny fampiasana literals binary mivantana.
int binary = 0b1010;  // 10 amin'ny decimals

C++17, navoaka tamin'ny taona 2017, dia nampiditra endri-javatra vaovao sy fanatsarana ny fiteny.

  • if constexpr : Mamela ny fifantenana araka ny compile-time ho an'ny fifanarahan'ny kaody.
template<typename T>
void foo(T val) {
    if constexpr (std::is_integral<T>::value) {
        std::cout << val << " dia integer." << std::endl;
    } else {
        std::cout << val << " dia tsy integer." << std::endl;
    }
}
  • Structured bindings : Mamela ny fizarana sanda amin'ny fanovana maro avy amin'ny structure na tuple.
std::tuple<int, double, std::string> t(1, 2.5, "hello");
auto [a, b, c] = t;  // a dia 1, b dia 2.5, c dia "hello"
  • std::optional : Mamela ny sanda mety tsy ho voafaritra (optional).
std::optional<int> opt = 42;
if (opt) {
    std::cout << "Manana sanda: " << *opt << std::endl;
} else {
    std::cout << "Tsy misy sanda" << std::endl;
}
  • inline variables : Mamela ny famaritana inline variables amin'ny header.
inline int x = 10;

C++20, navoaka tamin'ny taona 2020, dia nampiditra endri-javatra lehibe maro izay nanatsara ny fiteny sy ny fahaiza-mamorona.

  • Concepts : Mamela ny famaritana sy fitsapana ny constraints amin'ny templates.
template<typename T>
concept Number = std::is_arithmetic<T>::value;

template<Number T>
T add(T a, T b) {
    return a + b;
}
  • Ranges : Endri-javatra vaovao amin'ny fandaminana sy filtration angona amin'ny fomba intuitif kokoa.
#include <ranges>

auto even = [](int n) { return n % 2 == 0; };
auto nums = {1, 2, 3, 4, 5, 6};

for (int i : nums | std::views::filter(even)) {
    std::cout << i << ' ';  // 2 4 6
}
  • Coroutines : Mamela ny fampiatoana sy fanohizana ny asany amin'ny fotoana rehetra.
#include <coroutine>

std::generator<int> counter() {
    for (int i = 0; i < 10; ++i)
        co_yield i;
}
  • Modules : Mamela ny fandaminana kaody sy fanafainganana ny compilation amin'ny fampiasana modules.
module hello;

export void say_hello() {
    std::cout << "Hello, world!" << std::endl;
}

C++23, navoaka tamin'ny taona 2023, dia mbola namolavola endri-javatra maro izay manatsara ny fiteny C++.

  • Deduction guides for CTAD : Manatsara ny fanampiana ny Class Template Argument Deduction.
std::pair p(1, 2.0);  // Mamaritra avy hatrany ny std::pair<int, double>
  • Multidimensional subscript operator : Manome ny fahaizana mampiasa ny operator `[]` marobe.
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
matrix[1, 2] = 10;  // Mametraka sanda amin'ny matrix[1][2]
  • std::expected : Fanatsarana ny fiasa miaraka amin'ny exceptions na errors amin'ny alalan'ny valin-draikitra.
std::expected<int, std::string> divide(int a, int b) {
    if (b == 0)
        return std::unexpected("Fizarana amin'ny zero");
    return a / b;
}
  • Explicit object parameter : Manome fomba vaovao hanoratana member function amin'ny fanampiana ny parameter explicit.
struct MyClass {
    void func(this MyClass& self, int x) {
        // kaody ao anatiny
    }
};

Fehiny

hanova

Ireo kinova farany amin'ny C++ dia mitondra fanatsarana sy endri-javatra vaovao maro izay manatsara ny fiteny sy ny fahaiza-mamorona. Ny fahatakarana ireo endri-javatra ireo dia zava-dehibe amin'ny fampiasana maoderina ny C++ ary amin'ny fampandrosoana rindranasa mahomby sy maharitra.