Especificador noexcept
Marque funções que não lançam exceções
Especificador noexcept é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
O que noexcept declara
O especificador noexcept promete que uma função não lançará exceções. Se ainda assim ela lançar uma, o programa chamará std::terminate.
#include <iostream>
int square(int x) noexcept {
return x * x;
}
int main() {
std::cout << square(5) << "\n";
}Por que isso importa
Saber que uma função não pode lançar exceções permite que o compilador e a biblioteca façam otimizações — por exemplo, escolhendo movimentações em vez de cópias durante o crescimento de um contêiner.
As operações de movimentação devem ser noexcept
std::vector só usa seu construtor de movimentação durante a realocação se ele for noexcept; caso contrário, copia por segurança. Portanto, marque as movimentações como noexcept.
struct Buffer {
int* p;
Buffer(Buffer&& o) noexcept : p(o.p) { o.p = nullptr; }
};Destrutores são noexcept por padrão
Desde o C++11, os destrutores são implicitamente noexcept. Permitir que uma exceção escape de um deles encerra o programa.
noexcept condicional
noexcept(expr) faz a promessa depender de um booleano avaliado em tempo de compilação — útil em modelos que encaminham a garantia de outro tipo.
template <class T>
void swapValues(T& a, T& b) noexcept(noexcept(T(std::move(a)))) {
T tmp = std::move(a);
a = std::move(b);
b = std::move(tmp);
}Consultando com o operador noexcept
Como operador, noexcept(expr) produz true se a expressão for declarada como não lançadora — algo útil em modelos.
#include <iostream>
int f() noexcept { return 1; }
int g() { return 2; }
int main() {
std::cout << noexcept(f()) << " " << noexcept(g()) << "\n"; // 1 0
}noexcept faz parte do tipo
Desde o C++17, noexcept faz parte do tipo de um ponteiro para função, portanto uma função que lança exceções não pode ser associada a um ponteiro noexcept.
Não prometa demais
Só marque uma função como noexcept se tiver certeza de que ela não pode lançar exceções. Uma promessa falsa que seja violada causa a falha de todo o programa.
Candidatos Good
Trocas, movimentações, destrutores, acessadores simples e auxiliares aritméticos são candidatos naturais a funções noexcept.
noexcept versus especificação de lançamento
A antiga especificação dinâmica throw() foi descontinuada e removida. Em vez dela, use noexcept no C++ moderno.
Desempenho e segurança
noexcept documenta a intenção e também permite otimizações como movimentar durante a realocação — uma pequena anotação com impacto real.
Verificação rápida
Teste sua compreensão de noexcept.
Recapitulação
Você aprendeu que o especificador noexcept promete a ausência de exceções, permitindo otimizações como a movimentação durante a realocação. Marque movimentações, trocas e destrutores como noexcept, use formas condicionais em modelos e nunca prometa mais do que pode garantir.
Perguntas Frequentes
A aula “Especificador noexcept” é grátis?
Sim — o texto completo de “Especificador noexcept” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Especificador noexcept”?
Marque funções que não lançam exceções Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Especificador noexcept”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- try, catch, throw
- Segurança contra exceções
- Especificador noexcept
- Tipos de exceção personalizados