Características interesantes de C ++ 20 para desarrolladores integrados

C sigue siendo el lenguaje de programación favorito entre los desarrolladores de sistemas embebidos, sin embargo, hay suficientes de ellos que usan C ++ en su práctica.





Usando las capacidades apropiadas de C ++, puede escribir código que no será inferior en eficiencia al código de una aplicación similar escrita en C, y en algunos casos será incluso más eficiente, ya que puede ser bastante tedioso para un programador común implementar alguna funcionalidad en C, lo cual es mucho más fácil de implementar con características adicionales de C ++.





C ++ 20 es la séptima iteración de C ++, precedida, por ejemplo, por C ++ 17, C ++ 14 y C ++ 11. Cada iteración agregó una nueva funcionalidad y también afectó un par de características agregadas anteriormente. Por ejemplo, la palabra clave auto en C ++ 14.





Aprox. transl.:





C ++ 14 introdujo nuevas reglas para la palabra clave auto . Anteriormente, auto a{1, 2, 3}, b{1};



se permitían expresiones y ambas variables eran de tipo initializer_list<int>



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



da como resultado un error de compilación y se auto b{1};



compila correctamente, pero el tipo de variable será int



y no initializer_list<int>



. Estas reglas no se aplican a expresiones auto a = {1, 2, 3}, b = {1};



en las que las variables todavía son de tipo initializer_list<int>



.









Se han realizado cambios importantes en C ++ 11, y es la versión más común del estándar utilizado en los sistemas integrados, ya que los desarrolladores de sistemas integrados no siempre utilizan el conjunto de herramientas más actualizado. Las soluciones probadas y confiables son fundamentales al desarrollar una plataforma que puede durar décadas.





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