Ist unsigned char ('0') legal C ++

7

Das folgende Kompilieren in Visual Studio, aber das Kompilieren unter g ++ funktioniert nicht.

%Vor%

Ist unsigned char () eine gültige Möglichkeit, in C ++ zu konvertieren?

    
qaz 08.07.2010, 23:02
quelle

8 Antworten

11

Nein, das ist nicht legal.

Eine explizite Typumwandlung im Funktionsstil erfordert einen einfachen Typ-Bezeichner , gefolgt von einer eingeklammerten Ausdruck-Liste . (§5.2.3) unsigned char ist nicht ein einfacher Typ-Spezifizierer ; Dies steht im Zusammenhang mit einer Frage, die von James .

Offensichtlich wäre es legal, wenn unsigned char ein einfacher Typ-Spezifizierer wäre. Ein Workaround ist die Verwendung von std::identity :

%Vor%

Und dann:

%Vor%

std::identity<unsigned char>::type ist ein einfacher Typ-Specifier und sein Typ ist einfach der Typ des Template-Parameters.

Natürlich erhalten Sie eine Zwei-für-Eins mit static_cast . Dies ist die bevorzugte Casting-Methode.

    
GManNickG 08.07.2010, 23:17
quelle
5

Die bevorzugte Methode zum Umwandeln in C ++ ist die Verwendung von static_cast like so:

%Vor%     
wheaties 08.07.2010 23:09
quelle
3

Versuchen Sie, Klammern int a = (unsigned char)('0');

hinzuzufügen

oder

%Vor%     
doc 08.07.2010 23:08
quelle
2

Nein, ist es nicht - eine Funktion-Stil-Besetzung kann keinen Platz in seinem Namen haben.

Ein Fall für einen C-Style-Cast vielleicht:

%Vor%     
anon 08.07.2010 23:24
quelle
1

Ich bin mir ziemlich sicher, dass es eine Microsoft-Erweiterung ist.

    
fredoverflow 08.07.2010 23:05
quelle
0

Nein, ist es nicht. Aber warum die Besetzung an erster Stelle? Das ist absolut richtig,

%Vor%     
John 08.07.2010 23:15
quelle
0

Warum versuchst du sogar, von einem char zu einem unsignierten char zu gehen und das einem int zuzuweisen? Sie setzen einen vorzeichenlosen Wert in einen signed int (was legal, aber uncool ist).

Schreiben von '0' gibt Ihnen ein Zeichen mit Wert 48. Sie können

versuchen %Vor%

Auf diese Weise nimmst du das Zeichen, wirfst es auf einen int und verwendest es. Du könntest sogar sagen

%Vor%

Und das würde das Gleiche tun. Was genau versuchst du zu tun?

    
EboMike 08.07.2010 23:16
quelle
0

Versuchen Sie, die ganze Zahl 0 oder das Zeichen '0' hinein zu bekommen? Das Zeichen '0' bei den meisten Implementierungen ist nämlich nur die Ganzzahl 48, aber in 8 Bits.

Der einzige Unterschied zwischen einem char und einem int besteht darin, dass char kleiner oder gleich short int sein muss. und int muss dementsprechend größer oder gleich sein als short int, dies macht normalerweise char 8 Bits, kurz in 16, und in 32 heutzutage.

Stuf wie 'a'+2 bekommt 'c' funktioniert nämlich. Wenn Sie ein Array haben, das lang genug ist, können Sie es auch wie array[' '] indizieren, um Index 32 zu erhalten.

Wenn Sie versuchen, es auf den Ganzzahlwert 0 zu setzen, würde dies eine tatsächliche Funktion erfordern, die das bestimmt.

    
Zorf 09.07.2010 00:06
quelle

Tags und Links