Recursos intrigantes do C ++ 20 para desenvolvedores incorporados

C ainda é a linguagem de programação favorita entre os desenvolvedores de sistemas embarcados, no entanto, há muitos deles que usam C ++ em sua prática.





Usando os recursos de C ++ apropriados, você pode escrever código que não será inferior em sua eficiência ao código de um aplicativo semelhante escrito em C e, em alguns casos, será ainda mais eficiente, pois pode ser bastante tedioso para um programador comum implementar alguma funcionalidade em C, o que é muito mais fácil de implementar com recursos C ++ adicionais.





C ++ 20 é a sétima iteração de C ++, precedida, por exemplo, de C ++ 17, C ++ 14 e C ++ 11. Cada iteração adicionou uma nova funcionalidade ao mesmo tempo que afetou alguns recursos adicionados anteriormente. Por exemplo, a palavra - chave auto em C ++ 14.





Aproximadamente. trad.:





C ++ 14 introduziu novas regras para a palavra - chave auto . Anteriormente, as expressões auto a{1, 2, 3}, b{1};



eram permitidas e ambas as variáveis ​​eram do tipo initializer_list<int>



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



resulta em um erro de compilação e auto b{1};



compila com sucesso, mas o tipo da variável será int



e não initializer_list<int>



. Essas regras não se aplicam a expressões auto a = {1, 2, 3}, b = {1};



nas quais as variáveis ​​ainda são do tipo initializer_list<int>



.









C ++ 11 passou por mudanças significativas e é a versão mais amplamente usada do padrão usado em sistemas embarcados, pois os desenvolvedores de sistemas embarcados nem sempre usam o kit de ferramentas mais atualizado. Soluções comprovadas e confiáveis ​​são críticas ao desenvolver uma plataforma que pode 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