Pergunta

Se eu tiver FN como este:

void fnc(const SomeType&){/**/}  

E quando listo pré -condições e pós -condicionas para esta FNC, acho que a pré -condição da formulário:
Algum dia deve ser do tipo correto É bastante burro, não é? Estou pedindo isso porque, na minha uni, eles querem que listemos algo assim, mas se o tipo de um Arg não estará correto, o código não será compilado de qualquer maneira, então acho que é errado ter a pré -condição desse formulário. Mas, como sempre, eu estou errado.

Foi útil?

Solução

Não indique o óbvio.

Como você diz, o código claramente não será compilado se os tipos não corresponderem.

As condições pré e pós-condições dependerão do que a função está tentando fazer.

Outras dicas

Se seus professores estão pedindo que você adicione comentários desse tipo, provavelmente não é para os casos simples, quando esse comentário é simplesmente burro e verificado pelo compilador de qualquer maneira.

Mas, em alguns casos, o tipo formal definido no algoritmo pode ser mais restritivo do que o tipo de implementação usado no C ++. Nesses casos, esse tipo de comentário pode ter algum uso.

Outro caso útil é a documentação autogenerada com base nos comentários, mas o sistema de documentação deve ser capaz de extrair essas informações por si só do protótipo da função.

Eu afirmaria assim:

O primeiro argumento será do tipo SomeType, ou castável a isso.

Se o compilador pode verificar isso não importa. Se algum As pré -condições podem ser elaboradas a partir da assinatura de uma função, o que não significa que essas coisas não sejam pré -condições. Depois de ler as condições pré -condições, o usuário deve ser capaz de escrever um programa que seria compilado e executado corretamente.

Faça comentários como isso é estúpido - eu concordo. Os comentários devem fornecer algumas informações úteis.

A lista de pré -condições deve dizer o que deve ser satisfeito para executar a função. A lista de condições postais deve dizer o que deve ser satisfeito na saída da função. Você pode verificar essas condições de três maneiras:

  • Afirmação de tempo de execução (usando macro C afirmar()), quando a condição deve ser cumprida para executar a função. Caso contrário, o processo termina.
  • Asserção estática (usando std :: static_assert se você usar C ++ 0x ou boost_static_assert). Isso geralmente não é feito, já que essa verificação é feita no momento da compilação
  • Mecanismo de erro (jogando uma exceção ou retornando um código de erro)

Você também pode adicionar uma lista de argumentos de modelo ao comentário da função e fazer com que a compilação falhe se eles não corresponderem aos requisitos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top