0Pricing
C++ Academy · Aula

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

  1. try, catch, throw
  2. Segurança contra exceções
  3. Especificador noexcept
  4. Tipos de exceção personalizados
← Voltar para C++ Academy