¿Por qué este fragmento de C ++ se compila (la función no vacía no devuelve un valor) [duplicado]
Esta pregunta ya tiene una respuesta aquí:
¿Por qué el hecho de salir del final de una función no vacía sin devolver un valor no produce un error de compilación? 8 respuestasEncontré esto en una de mis bibliotecas esta mañana:
static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
tvec3::Min(a,b,out);
out.w = min(a.w,b.w);
}
Esperaría un error del compilador porque este método no devuelve nada, y el tipo de retorno no esvoid
.
Las únicas dos cosas que vienen a la mente son
En el único lugar donde se llama a este método, el valor de retorno no se está utilizando o almacenando. (Este método se suponía que eravoid
- latvec4
el tipo de retorno es un error de copiar y pegar)
un valor por defecto construidotvec4
se está creando, lo que parece un poco diferente, oh, todo lo demás en C ++.
No he encontrado la parte de la especificación de C ++ que aborda esto. Las referencias (ha) son apreciadas.
Actualizar
Enalgunos Circunstancias, esto genera un error en VS2012. No he reducido los detalles, pero es interesante, sin embargo.