Frage

In Abschnitt 4.5 des C ++ Standard (integer Förderung) spricht über spezifische Fälle von mit einem höheren Rang integrale Typen Typen konvertiert werden.

Abschnitt 4.7 des C ++ Standard (Integral-Conversions) beginnt mit (Kugel 4.7.1):

Ein R-Wert eines Integer-Typ kann mit einem R-Wert von einem anderen Typ integer umgewandelt werden. Ein R-Wert eines Aufzählungstyp kann zu einem R-Wert eines Ganzzahl-Typ umgewandelt werden.

Soweit ich Conversions in 4.5 beschrieben verstehen (vielleicht mit Ausnahme der Kugel 4.5.3 (Aufzählungen)) allein durch die Verwendung der Techniken aus Abschnitt 4.7 durchgeführt werden: 4.5.1 und 4.5.2 sind von 4.7 vollständig abgedeckt. 1; 4.5.4 durch 4.7.4 abgedeckt. Also, was ist der Zweck des gesamten Abschnitts 4.5? Was weitere Umwandlungen nicht aktiviert es? Vielleicht einige Einschränkungen ich fehle?

P. S. Ich lese C ++ 03-Version des Standards.

War es hilfreich?

Lösung

I denken , dass die Unterscheidung ist wichtig, weil beide fallen nicht in der gleichen Umwandlung Kategorie und andere haben Rang (siehe 13.3.3.1 .1, Sequenzen können Standard-conversion). Der Rang macht einen Unterschied, wenn es um die Überladungsauflösung kommt:

Standardkonvertierungssequenzen, die durch ihre Reihen geordnet sind: ein Exact Match ist eine bessere Umwandlung als eine Promotion, das eine bessere Konvertierung als eine Conversion.

Am Ende ich glaube, es ist die Unterscheidung zwischen 4,5 und 4,7, die der folgenden Code eindeutig macht:

#include <iostream>

void foo(int i)            { std::cout << "foo(int)" << std::endl; }
void foo(unsigned short i) { std::cout << "foo(unsigned short)" << std::endl; }

int main()
{
    foo(static_cast<short>(1));
}
  • short zu int ist eine Förderung (also mit Förderung Rang)
  • short zu unsigned short ist eine Umwandlung (also mit Umwandlung Rang)

Am Ende dieser Code ruft foo(int), weil es ein besserer Kandidat ist.

Andere Tipps

Promotions treten während Arithmetik und andere Operationen. Conversions auftreten, wenn lediglich ein integraler Typ in einer anderen zu speichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top