C++/Fampidirana ny C++ Maoderina
C++11
hanovaC++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
hanovaC++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
hanovaC++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
hanovaC++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
hanovaC++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
hanovaIreo 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.