次のコードスニペットはコンパイルエラーを生成します。
char a = 'a';
const char* a_ = &a;
unsigned char b = 'b';
const char* b_ = &b;
最後の行でエラーが発生します。
error: invalid conversion from 'unsigned char*' to 'const char*'
私は、暗黙的に変換することができますchar*
しconst char*
、私は同じことを行うことはできませんかunsigned char*
?この背後にある理由は何ですか?
非定数オブジェクトへのポインタは、同じタイプの定数オブジェクトへのポインタに暗黙的に変換できます。したがって、これらの宣言は
char a = 'a';
const char* a_ = &a;
有効です。
ここで、次の宣言について考えてみましょう(わかりやすくするために修飾子const
は削除されています)
unsigned char b = 'b';
char* b_ = &b;
右側の式のタイプunsigned char *
は、初期化されたオブジェクトのタイプchar *
です。これらの2つのタイプは異なり、あるタイプから別のタイプへの暗黙の変換はありません。代わりにあなたは書くことができます
unsigned char b = 'b';
char* b_ = reinterpret_cast<char *>( &b );
この場合、右側と左側の両方のエンティティは同じタイプです。これで、宣言されたオブジェクトを指定するための修飾子constを追加できます。
unsigned char b = 'b';
const char* b_ = reinterpret_cast<char *>( &b );
CおよびC ++では、タイプchar
、signed char
およびunsigned char
は3つの異なるタイプです。型char
は、型signed char
または型unsigned char
(同じ範囲の値を持つことができます)のいずれかとして動作できますが、これによって符号付きまたは符号なしの文字になりません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加