Um ein wenig Hintergrund (in keinem Zusammenhang mit der Frage, die folgen) zu geben, in C++ 11 bemerkte ich eine Verengung Ausgabe:Konstante Regeln für ganzzahlige Werbung?
int foo[] = { 0xFFFFFFFF };
Dies versagte zu kompilieren (Umwandlung Verengung), weil 0xFFFFFFFF
ein unsigned int
ist . Ich habe jedoch Fälle gesehen, in denen 0xFF
signiert ist.
Ich habe über Integer-Promotion-Regeln, aber dies ist meist im Kontext von lvalues und nicht rvalues / Konstanten. Wie ermittelt der Compiler den Typ der Konstanten (ohne Literalsuffixe)? Gibt es eine Dokumentation oder einen netten kleinen Tisch/"Spickzettel", der die Regeln dafür zeigt? Ich bin mir nicht einmal sicher, wie das heißen soll, sonst hätte ich versucht, es selbst im C++ 11-Standard zu finden.
Vielen Dank im Voraus.
Es ist der schmalste Typ benötigt mit signed priorisiert und ein Minimum von "int". – chris
Ich habe meiner Antwort einige zusätzliche Details hinzugefügt, die Sie vielleicht nützlich/interessant finden. –