C++:invalid conversion from 'unsigned char *' to 'const char *'

1166 ワード

reinterpret_を使用可能castは強制変換を行います.例は以下の通りです.
unsigned char *foo();
std::string str;
str.append(reinterpret_cast<const char*>(foo()));

reinterpret_cast用法:reinterpret_cast(expression)type-idは、ポインタ、参照、算術タイプ、関数ポインタ、またはメンバーポインタである必要があります.reinterpret_cast演算子は、関係のないタイプ間の変換を処理するために使用されます.元のパラメータ(expressoin)と全く同じビットビットを持つ新しい値が生成されます.たとえば、int*n=new int、double*d=reinterpret_cast(n);計算を行った後、dは無駄な値を含む.これはreinterpret_castはnのビットビットをdにコピーするだけであり,必要な解析は行わない.そのためreinterpret_を慎重に使用する必要がありますcast.IBMのC++ガイドではreinterpret_を明確に教えてくれましたcastでいいです.あるいは変換演算子として使用されるべき場所:※ポインタタイプから十分な整数タイプへ※整数タイプまたは列挙タイプからポインタタイプへ※1つの関数を指すポインタから別の異なるタイプの関数を指すポインタ※1つのオブジェクトを指すポインタから別の異なるタイプのオブジェクトを指すポインタへ※クラス関数メンバーのポインタから別のタイプの関数メンバーへのポインタ※クラスデータメンバーへのポインタから別のタイプのデータメンバーへのポインタ
実はreinterpret_castの使用は上記のいくつかの項目に限定されず、任意のタイプのポインタ間で互いに変換することができ、コンパイルエラーは得られません.Linuxの下にあるreinterpret_かもしれませんcastの使用制限は、IBMがreinterpretを推奨している可能性もあります.キャスト方式.
参照リンク:http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const-char参照リンク:http://www.cnblogs.com/ider/archive/2011/07/30/cpp_cast_operator_part3.html