2016-07-25 4 views
2

Im CodeAnruf ambivalent wegen einer gelöschten Funktion?

void Fnc(long = 10) { } 
void Fnc() = delete; 

int main(int, char**) 
{ 
    Fnc(); 

    return 0; 
} 

Am Func nennen mein Compiler einen unklaren Anruf beschwert. Hilfe! Ich verstehe nicht, warum das passiert.

+2

Nur weil eine Funktion offiziell gelöscht wird, heißt das nicht, dass sie nicht existiert. Es beteiligt sich immer noch an der Überladungsauflösung usw. Nur wenn der Compiler versucht, diese Funktion aufzurufen, erhalten Sie eine Fehlermeldung "oh nein, du hast nicht". –

+0

Aha. Das macht Sinn. Danke Kumpel. –

Antwort

4

Nach Delete Function Definition:

Die Definition Form "= löschen;" zeigt an, dass die Funktion möglicherweise nicht verwendet wird. Alle Nachschlage- und Überladungsauflösungen treten jedoch auf, bevor die gelöschte -Definition notiert wird. Das heißt, es ist die Definition, die gelöscht wird, nicht das Symbol; Überladungen, die zu dieser Definition führen, sind schlecht formatiert.

Deshalb erhalten Sie mehrdeutigen Anruf.

4

Eine gelöschte Funktion wird nicht entfernt, sondern teilt dem Compiler mit, dass der Versuch, sie aufzurufen, ein Fehler ist.

Ihre Fnc(); konnte eine der Funktionen aufrufen, und der Compiler kann nicht sagen, welche Sie beabsichtigten. Dass einer von ihnen gelöscht wird, spielt keine Rolle, bis es der einzige beste Treffer ist. Dann wird es ein Fehler sein, kein Hinweis, um eine andere Funktion auszuwählen.

Verwandte Themen