Bahasa C masih menjadi bahasa pemrograman favorit di kalangan pengembang sistem tertanam, namun cukup banyak dari mereka yang menggunakan C ++ dalam praktiknya.
Dengan menggunakan kapabilitas C ++ yang sesuai, Anda dapat menulis kode yang tidak akan kalah dalam efisiensinya dengan kode aplikasi serupa yang ditulis dalam C, dan dalam beberapa kasus akan lebih efisien, karena bisa sangat membosankan bagi programmer biasa untuk mengimplementasikan beberapa fungsionalitas dalam C, yang jumlahnya banyak. lebih mudah diterapkan dengan fitur C ++ tambahan.
C ++ 20 adalah iterasi ketujuh dari C ++, yang didahului oleh, misalnya, C ++ 17, C ++ 14, dan C ++ 11. Setiap iterasi menambahkan fungsionalitas baru sekaligus memengaruhi beberapa fitur yang ditambahkan sebelumnya. Misalnya, kata kunci otomatis di C ++ 14.
Approx. terjemahan.:
C ++ 14 memperkenalkan aturan baru untuk kata kunci otomatis . Sebelumnya, ekspresi
auto a{1, 2, 3}, b{1};
diizinkan dan kedua variabel memiliki tipeinitializer_list<int>
. Dalam C ++ 14auto a{1, 2, 3};
menghasilkan kesalahan kompilasi danauto b{1};
berhasil dikompilasi, tetapi jenis variabelnya akan menjadiint
dan tidakinitializer_list<int>
. Aturan ini tidak berlaku untuk ekspresiauto a = {1, 2, 3}, b = {1};
di mana variabel masih bertipeinitializer_list<int>
.
C ++ 11 telah mengalami perubahan signifikan dan merupakan versi standar yang paling banyak digunakan yang digunakan dalam sistem tertanam, karena pengembang yang disematkan tidak selalu menggunakan toolkit yang paling mutakhir. Solusi yang terbukti dan andal sangat penting saat mengembangkan platform yang dapat bertahan selama beberapa dekade.
, ++20 . . , « ». , , , x < 20
, x.operator<=>(20) < 0
. , , <, <=, >= >, , . x == y
operator<=>(x, y) == 0
.
. .:
« » @Viistomin « spaceship ( ) C++20»
++20 , :
- , . ++11 constexpr , . ++20 , . , try/catch. .
consteval constexpr , , , , #define, ++.
. , . (. .: ) .
. .:
, @PkXwmpgN «C++20. Coroutines» , stackoverflow.
++20 coroutine_traits coroutine_handle. «». , .
++17, . , . Ada SPARK, , C++20 .
, . , . – (. .: ), . . , cppreference.com, :
#include <string>
#include <cstddef>
#include <concepts>
using namespace std::literals;
// "Hashable",
// 'T' , 'a' 'T',
// std::hash{}(a) std::size_t
template <typename T>
concept Hashable = requires(T a) {
{ std::hash{}(a) } -> std::convertible_to<std::size_t>;
};
struct meow {};
template <Hashable T>
void f(T); // ++20
// :
// template<typename T>
// requires Hashable<T>
// void f(T);
//
// template <typename T>
// void f(T) requires Hashable<T>;
int main() {
f("abc"s); // OK, std::string Hashable
f(meow{}); // : meow Hashable
}
++20, , , , .
#include . import export , - #include.
#include . , . , . , . , , , ++.
, , Java Ada . , , . . , , #include.
, #include . .
- Ada SPARK, C++20 C++ . C++20, , . , . , .
, C++20, , , ++20.