2017-01-17 3 views
0

Ich denke über Ausnahmen in C++Werden Ausnahmen vom Prozessor unterstützt?

Werden sie von Prozessor unterstützt? A oder B Idee ist schneller?

Idea A = Grifffehler durch

Idea B werfen = Fehler handhaben, indem bestimmten Wert zurückkehr

A:

int divide(int a, int b); 


void sth(){ 
    try 
    { 
    int ret = divide(10,0); 
    } 
    catch (const std::invalid_argument& e) 
    { 
    std::cout << e.what() << std::endl; 
    } 
} 
int divide(int a, int b){ 
    if(b == 0) 
    throw std::invalid_argument("B = 0 ?!"); 

    return a/b; 
} 

B)

int divide(int a, int b); 


void sth(){ 
    int ret = divide(10,0); // we want to catch error as above, don't worry about result 
    if(ret == -1) 
    std::cout << "Divide by 0!" << std::endl; 
    else if(ret == -2) 
    std::cout << "Other error" << std::endl; 
} 
int divide(int a, int b){ 
    if(b == 0) 
    return -1; 

    return a/b; 
} 
+4

Dies ist ein heißes Thema, Menschen haben starke Ansichten für beide Seiten des Arguments. Vorsicht vor voreingenommenen Antworten. –

+0

B ist offensichtlich nicht praktisch - warum würde -1/1 einen Fehler zurückgeben? Und keiner spricht Ihre Überschrift an. –

+0

@latedeveloper Sie haben Recht, aber ich möchte nur Idee .. Wo Rückkehr ist entgegengesetzt zu werfen, bitte konzentrieren Sie sich auf die Idee nicht auf diesem bestimmten Beispiel, davon ausgehen, dass wir nur 'dividieren (x, 0)' - Fehler nicht zu fangen 'divide (-1,1)' - Ich sollte struct zurückgeben, aber das ist nicht das Problem dieses Themas –

Antwort

4

Die üblichen Denk Was zu wählen ist: Es kommt darauf an, wie oft man es erwartet il.

  • Wenn Sie erwarten, dass es oft fehlschlägt, sind Nachprüfungen besser, da die Prüfung wahrscheinlich billiger ist als die Behandlung einer Ausnahme.

  • Wenn Sie erwarten, dass Fehler seltener auftreten, dann können Ausnahmen eine bessere Wahl sein, denn dann verschwenden Sie keine Ressourcen, die ständig prüfen, was Sie wahrscheinlich wissen. Verwenden Sie Ausnahmen, um außergewöhnliche Umstände zu behandeln.

  • Natürlich ist dies völlig subjektiv, ohne ein bestimmtes Szenario zu benchmarken. Wann ist das Versagen selten genug, um Ausnahmen zu rechtfertigen?

    Dies beantwortet nicht Ihre Titelfrage, aber es ist eine gute Richtlinie zu beachten. Hoffentlich kann jemand anders den anderen Teil beantworten.

    Verwandte Themen