Fitur C ++ 20 Menarik untuk Pengembang Tersemat

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 tipe initializer_list<int>



. Dalam C ++ 14 auto a{1, 2, 3};



menghasilkan kesalahan kompilasi dan auto b{1};



berhasil dikompilasi, tetapi jenis variabelnya akan menjadi int



dan tidak initializer_list<int>



. Aturan ini tidak berlaku untuk ekspresi auto a = {1, 2, 3}, b = {1};



di mana variabel masih bertipe initializer_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.








All Articles