C++ · Intermediário · Inglês · Técnico
noexcept
Especificador que promete que a função não lança exceções. Permite otimizações e, principalmente, faz contêineres como vector preferirem mover a copiar elementos ao realocar.
Onde usar
Marcar construtores e atribuições de movimento como noexcept é um pedido frequente em code review. Se uma função noexcept lançar mesmo assim, o programa chama std::terminate.
Em código
struct Item {
Item(Item&& o) noexcept
: dados(std::move(o.dados)) {}
std::vector<int> dados;
};Exemplos
Mark the move constructor noexcept so vector can use it during growth.
Marque o construtor de movimento como noexcept para o vector usá-lo ao crescer.
If a noexcept function throws, the program calls terminate.
Se uma função noexcept lança, o programa chama terminate.
Cuidado
noexcept não é checado em tempo de compilação: a promessa quebrada só aparece em execução.