Fonctionnalités C ++ 20 intrigantes pour les développeurs intégrés

C est toujours le langage de programmation préféré des développeurs de systèmes embarqués, cependant, il y en a suffisamment qui utilisent C ++ dans leur pratique.





En utilisant les capacités C ++ appropriées, vous pouvez écrire du code dont l'efficacité ne sera pas inférieure à celle d'une application similaire écrite en C, et dans certains cas, il sera encore plus efficace, car il peut être assez fastidieux pour un programmeur ordinaire d'implémenter certaines fonctionnalités en C, ce qui est beaucoup plus facile à implémenter avec des fonctionnalités C ++ supplémentaires.





C ++ 20 est la septième itération de C ++, précédée, par exemple, de C ++ 17, C ++ 14 et C ++ 11. Chaque itération a ajouté de nouvelles fonctionnalités tout en affectant également quelques fonctionnalités précédemment ajoutées. Par exemple, le mot clé auto en C ++ 14.





Environ. trad.:





C ++ 14 a introduit de nouvelles règles pour le mot clé auto . Auparavant, les expressions auto a{1, 2, 3}, b{1};



étaient autorisées et les deux variables étaient de type initializer_list<int>



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



entraîne une erreur de compilation et se auto b{1};



compile avec succès, mais le type de variable sera int



et non initializer_list<int>



. Ces règles ne s'appliquent pas aux expressions auto a = {1, 2, 3}, b = {1};



dans lesquelles les variables sont encore de type initializer_list<int>



.









C ++ 11 a subi des modifications importantes et est la version la plus courante de la norme utilisée dans les systèmes embarqués, car les développeurs de systèmes embarqués n'utilisent pas toujours la boîte à outils la plus à jour. Des solutions éprouvées et fiables sont essentielles lors du développement d'une plate-forme qui peut durer des décennies.





, ++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