As Sequências Especificadoras de Atributos (Attribute Specifiers) em C++ são metadados que fornecem informações adicionais ao compilador sobre como ele deve tratar certas partes do código.
Esses atributos podem ajudar a:
Vamos ver alguns exemplos de atributos em C++.
[[nodiscard]]
:Esse atributo indica que o valor de retorno de uma função não deve ser ignorado. Se o valor de retorno for ignorado, o compilador gerará um aviso.
O compilador emitirá um aviso se a função computeValue for chamada e seu valor de retorno não for usado. Isso é útil para evitar a perda acidental de valores importantes.
Se você remover o
[[nodiscard]]
do código note que não haverá avisos, mas com o[[nodiscard]]
a saída será similar a isso:
[[fallthrough]]
:Esse atributo é usado em uma declaração case dentro de um switch para indicar que a queda (fallthrough
) para o próximo case é intencional. Isso ajuda a evitar avisos do compilador sobre quedas acidentais.
No exemplo do switch, [[fallthrough]]
indica que a queda de case 1 para case 2 é intencional. Sem esse atributo, o compilador poderia emitir um aviso sobre a falta de break em case 1.
[[unlikely]]
:Esse atributo sugere ao compilador que a probabilidade de execução de um ramo de código é baixa. Isso pode ajudar na otimização do código gerado.
O compilador pode otimizar o código gerado com base na dica de que a condição value == 42
é improvável de ser verdadeira, possivelmente reordenando o código para melhorar o desempenho no caso mais comum.
Esses atributos são parte da modernização contínua da linguagem C++ para tornar o código mais expressivo e ajudar na detecção precoce de erros, bem como na otimização de desempenho.
Para mais informações acesse o cpp reference.