Valeur de retour dans if-else - C++

Le code ci-dessous imprime:

5

Pourquoi faut-il imprimer 5? Aussi, si il revient 5 pourquoi il n'a pas l'impression de "James"? Je ne comprends pas le code ci-dessous. Si je supprime l'autre mot, il imprime -1. Cependant ne devrait-il pas retourner une valeur par défaut?

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int fonk()
{
    int a = 5, b = 3;
    int c = a*b;
    if(c >10)
    {
        if( a<b && a >0)
        {   cout <<"James";
        return a;
        }

        else if(b<0)
        {
            return b;
        }

    }
    else return -1;

}

int main()
{
    int x = fonk();
    cout << x;
}
Ce code ne doit jamais être de retour 5. Je voudrais assurez-vous que vous n'avez pas d'erreurs du compilateur qui empêchent l'application d'être recompilées pour assurez-vous que vous êtes en train de commencer le droit de l'exécutable.
Quel compilateur? Pour moi, il n'a absolument pas d'impression ou de retour de 5...
ce code ne peut pas être compilé, comme tous les chemin retourne des valeurs
J'ai trouvé une citation sur UB: "[n3337:6.6.3.2]: qui Coule à la fin d'une fonction est l'équivalent d'un retour sans valeur; il en résulte un comportement non défini dans la valeur de retour de la fonction." mais c'est bien formée au programme, donc, le compilateur doit passer ce code.
c'est parce que parfois, quelqu'un va vouloir écrire du code comme if (condition) return 1 else throw_exception();. Le compilateur ne sait pas que throw_exception() ne retourne pas (bien que certains compilateurs vous permettent de déclarer qu'il n'est pas). Il serait ennuyeux d'avoir à écrire return 0; à la fin de la fonction juste de la fermer une erreur sur comment aurait il y a un chemin qui ne reviendra pas. Fondamentalement, C++ priorise le code est correct d'être raisonnable, plus de code incorrect utiles erreurs...

OriginalL'auteur user1559792 | 2013-11-01