Pregunta

Si tengo FNC como esto:

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

Y cuando enumero condiciones previas y condiciones posteriores de este FNC creo que la inclusión de condición previa de la forma:
  SomeType debe ser de un tipo correcto es bastante tonto, ¿verdad? Estoy pidiendo esto porque en mi uni nos quieren a la lista de algo como esto, pero si el tipo de un arg no será correcto código no se compilará todos modos así que creo que es malo tener precondición de esta forma. Pero como de costumbre, mis estar equivocado.

¿Fue útil?

Solución

No decir lo obvio.

Como usted dice, el código claramente no compilar si los tipos no coinciden.

Los pre- y post-condiciones dependerá de lo que la función está tratando de hacer.

Otros consejos

Si los maestros que están pidiendo a agregar comentarios de este tipo, probablemente no para los casos simples, cuando tales comentarios son simplemente tonto y verificado por el compilador de todos modos.

Sin embargo, en algunos casos, el tipo formal definido el algoritmo puede ser más restrictiva que el tipo de aplicación utilizada en C ++. En tales casos, ese tipo de comentarios puede tener algún uso.

Otro caso es muy útil para la documentación generada automáticamente basándose en las observaciones, pero el sistema de documentación debe ser capaz de extraer esa información por sí mismo desde el prototipo de función.

Yo había estado en el que como esto:

  

El primer argumento debe ser de tipo SomeType o moldeable a la misma.

Si compilador puede comprobar que no importa. Si algunos condiciones previas se pueden idear partir de la firma de una función, esto no quiere decir que estas cosas no son condiciones previas. Después de leer las condiciones previas, el usuario debe ser capaz de escribir un programa que debe compilarse y ejecutarse correctamente.

Haga como los comentarios que es estúpido - Estoy de acuerdo. Los comentarios deben proporcionar alguna información útil.

Lista de condiciones previas deben decirle lo que tiene que ser satisfecha con el fin de ejecutar la función. Lista de poscondiciones debe decirle lo que tiene que ser satisfecho en la salida de la función. Puede comprobar las condiciones de tres maneras:

  • tiempo de ejecución afirmación (utilizando c macro assert () ), cuando la condición se tiene que cumplir con el fin de ejecutar la función. De lo contrario los concluido el proceso.
  • afirmación estática (std :: static_assert si se utiliza C ++ 0x, o BOOST_STATIC_ASSERT). Esto por lo general no se hace, ya que esta comprobación se realiza en el momento de la compilación
  • mecanismo de error (lanzar una excepción o devolver un código de error)

También puede agregar una lista de argumentos de plantilla a la observación de la función, y hacer la compilación falla si no se ajustan a los requisitos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top