14

を使用して文字列に追加する前に、明示的にキャストnumber 0する必要があるのはなぜですか?charstring::operator+

using namespace std;

int main()
{

    string s = "";
    s += 65; // no compile error
    s += (char)0; // requires explicit cast 
    //s += 0; // compile error
    return 0;
}

明確にするために更新:私の目標は、既存のバイト配列に1バイト(ゼロを含む任意の値を含む)を追加することでした。

4

7 に答える 7

1

誰もがあなたに言ったのは、それ0は でありint、利用可能なものoperator+=()は acharまたは achar*であり、0 (ただし他の整数は不可) は両方に変換できるため、あいまいさがあります。

誰もが言い忘れていたことは、正しいイディオムはキャストではなくcharリテラルを使用することです。

s += '\0';
于 2011-12-18T08:29:49.213 に答える
0

目標が "A" に等しい文字列を持つことである場合は、単純に次のようにする必要があります。

string s = "";
s += 65;

0C++ では、文字列の末尾にヌル文字 (または'\0'その'0'ようなもの)を配置する必要はありません。実際、これを行ってはなりません。これは、これについてよく考える必要がある C とは異なります。

あなたの目標は何ですか?文字列として単純な「A」が必要ない場合は、おそらく「A0」が必要です。string s = "";s += 65;s += '0';return 0;

于 2011-12-18T11:03:46.330 に答える