char *をconstchar *に暗黙的に変換できるのに、unsigned char *は変換できないのはなぜですか

サディク

次のコードスニペットはコンパイルエラーを生成します。

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 ++では、タイプcharsigned charおよびunsigned charは3つの異なるタイプです。charは、型signed charまたは型unsigned char(同じ範囲の値を持つことができます)のいずれかとして動作できますが、これによって符号付きまたは符号なしの文字になりません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

コンパイラがchar *をstd :: stringに暗黙的にしか変換できないのはなぜですか

分類Dev

const char []が常にconstchar *に変換されるのはなぜですか?

分類Dev

なぜCはchar **からconstchar * const *への暗黙の変換を許可しないのですか(そしてC ++は許可します)?

分類Dev

どのくらいの大きさの「int」を暗黙的に「char」に変換できますか?

分類Dev

char *を暗黙的にstd :: stringに変換するべきではありませんか?

分類Dev

C / C ++ strcmpは引数1を「char」から「constchar *」に変換できません

分類Dev

Cのcharに暗黙的に整数をキャストできるのはなぜですか

分類Dev

const char *がstd :: stringではなくboolに暗黙的に変換されるのはなぜですか?

分類Dev

strtokがconstchar *ではなくchar *を使用するのはなぜですか?

分類Dev

タイプ 'System.Linq.IQueryable <char []>'を 'string []'に暗黙的に変換することはできません

分類Dev

算術演算子を使用するときにcharからintへの暗黙的な変換を回避する方法

分類Dev

constcharをcharに変換する際の未処理の例外

分類Dev

std :: stringをconstchar *またはchar *に変換する方法は?

分類Dev

std :: stringをconstchar *またはchar *に変換する方法は?

分類Dev

std :: stringをconstchar *またはchar *に変換する方法は?

分類Dev

R:as.characterがint行列をcharに変換するのに、as.integerがchar行列をintに変換しないのはなぜですか?

分類Dev

C ++でchar *をconstchar *に変換します

分類Dev

ConstCharをChar * C ++に追加します

分類Dev

char []をchar *に置き換えるとバスエラーが発生するのはなぜですか?

分類Dev

C ++エラー:「std :: basic_string <char>」を「constchar *」に変換できません

分類Dev

なぜそれはcharを置き換えないのですか?

分類Dev

CS0266は、型 'System.Collections.Generic.IEnumerable <char>'を 'string'に暗黙的に変換できません

分類Dev

char8の大きなc配列をshort16に変換する最速の方法は何ですか?

分類Dev

strcmpのパラメーター1をcharからconstcharに変換できません

分類Dev

strcmpのパラメーター1をcharからconstcharに変換できません

分類Dev

C-char *からconstchar *変数を作成できますか?

分類Dev

boolをcharに変換すると、空またはnullの印刷が表示されるのはなぜですか

分類Dev

暗黙的に型 'int'を 'char'に変換することについて、 `s [i] + = s [j]`と `s [i] = s [i] + s [j]`の間で異なる理由

分類Dev

新しいRHELバージョンに移植するときに、コンパイラフラグを使用して「constchar *」から「char *」エラーへの無効な変換を抑制することは可能ですか?

Related 関連記事

  1. 1

    コンパイラがchar *をstd :: stringに暗黙的にしか変換できないのはなぜですか

  2. 2

    const char []が常にconstchar *に変換されるのはなぜですか?

  3. 3

    なぜCはchar **からconstchar * const *への暗黙の変換を許可しないのですか(そしてC ++は許可します)?

  4. 4

    どのくらいの大きさの「int」を暗黙的に「char」に変換できますか?

  5. 5

    char *を暗黙的にstd :: stringに変換するべきではありませんか?

  6. 6

    C / C ++ strcmpは引数1を「char」から「constchar *」に変換できません

  7. 7

    Cのcharに暗黙的に整数をキャストできるのはなぜですか

  8. 8

    const char *がstd :: stringではなくboolに暗黙的に変換されるのはなぜですか?

  9. 9

    strtokがconstchar *ではなくchar *を使用するのはなぜですか?

  10. 10

    タイプ 'System.Linq.IQueryable <char []>'を 'string []'に暗黙的に変換することはできません

  11. 11

    算術演算子を使用するときにcharからintへの暗黙的な変換を回避する方法

  12. 12

    constcharをcharに変換する際の未処理の例外

  13. 13

    std :: stringをconstchar *またはchar *に変換する方法は?

  14. 14

    std :: stringをconstchar *またはchar *に変換する方法は?

  15. 15

    std :: stringをconstchar *またはchar *に変換する方法は?

  16. 16

    R:as.characterがint行列をcharに変換するのに、as.integerがchar行列をintに変換しないのはなぜですか?

  17. 17

    C ++でchar *をconstchar *に変換します

  18. 18

    ConstCharをChar * C ++に追加します

  19. 19

    char []をchar *に置き換えるとバスエラーが発生するのはなぜですか?

  20. 20

    C ++エラー:「std :: basic_string <char>」を「constchar *」に変換できません

  21. 21

    なぜそれはcharを置き換えないのですか?

  22. 22

    CS0266は、型 'System.Collections.Generic.IEnumerable <char>'を 'string'に暗黙的に変換できません

  23. 23

    char8の大きなc配列をshort16に変換する最速の方法は何ですか?

  24. 24

    strcmpのパラメーター1をcharからconstcharに変換できません

  25. 25

    strcmpのパラメーター1をcharからconstcharに変換できません

  26. 26

    C-char *からconstchar *変数を作成できますか?

  27. 27

    boolをcharに変換すると、空またはnullの印刷が表示されるのはなぜですか

  28. 28

    暗黙的に型 'int'を 'char'に変換することについて、 `s [i] + = s [j]`と `s [i] = s [i] + s [j]`の間で異なる理由

  29. 29

    新しいRHELバージョンに移植するときに、コンパイラフラグを使用して「constchar *」から「char *」エラーへの無効な変換を抑制することは可能ですか?

ホットタグ

アーカイブ