? : es un operador ternario, que como su nombre lo indica toma tres parametros: una condicion y dos expresiones. Si la condicion es verdadera entonces devuelve la primera expresion y de lo contrario devuelva la segunda expresion.
Conditional Operator: ? :
En el caso de tu codigo devuelve 12 cuando hora es 0 o 12, y devuelve hora % 12 cuando no lo es. Si te das cuenta eso sirve para hacer AM/PM.
Y lo podrias analizar tal vez de esta forma:
Código:
int resultHora;
if ( (hora==0 || hora==12) )
{
resultHora = 12;
}
else
{
resultHora = hora % 12;
}
cout << resultHora;