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 tipoinitializer_list<int>
. Em C ++ 14auto a{1, 2, 3};
resulta em um erro de compilação eauto b{1};
compila com sucesso, mas o tipo da variável seráint
e nãoinitializer_list<int>
. Essas regras não se aplicam a expressõesauto a = {1, 2, 3}, b = {1};
nas quais as variáveis ainda são do tipoinitializer_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.