3

これは何をしますか: char(nextChar). char という名前の変数がありません。ここで char クラスのコンストラクターを呼び出していますか?

int nextChar;
while ((nextChar == stream.get()) != EOF)
{
    // Convert it to a string for lookup in the symbol table
    string foundChar = "";
    foundChar += char(nextChar);

}
4

4 に答える 4

7

オーバーロードされた文字列を使用して追加char(nextChar)し、文字列を破棄します。std::string foundCharstd::string::operator += (char)

char(nextChar)intは からへのキャストですchar(nextCharは として宣言されているためint) - と同等(char)nextCharです。

于 2012-11-15T15:03:06.617 に答える
1

this の動作は未定義です。

while ((nextChar == stream.get()) != EOF)

2 つの値を比較するのではなく、比較stream.get()nextCharます。その後、 nextChar は、(欠落している)初期化後に行ったメモリガベージを保持しています。

おそらく、値を割り当てて EOF と比較することを意図していたのでしょう。

while ((nextChar = stream.get()) != EOF)

さらにchar(nextChar)、より頻繁に使用されるものと同じ(char)nextCharか、それ以上のことを効果的に行っていますstatic_cast<char>(nextChar)

ところで:

int nextChar;

while ((nextChar = stream.get()) != EOF) { }

安全に短縮できます

while ((int nextChar = stream.get()) != EOF) { }

nextCharループの外側を必要としない限り。

于 2012-11-15T15:06:26.943 に答える
1

構文T(exp)はキャストであり、同等です(T)(exp)(ただしT()、デフォルトのコンストラクターに対応しT(exp1, exp2, ...)、対応するコンストラクターも呼び出します)。これは、

int* ptr;
int i = int(ptr);

は ( と同じ条件で、同じ意味でreinterpret_cast<int>(ptr)) 許可されますが、

int j = static_cast<int>(ptr);
int k(ptr);

そうではありません。

于 2012-11-15T15:22:17.533 に答える
0

char(nextChar) は、int データ型から char データ型への型キャストです。(char)nextChar と同等です。

詳細については、以下のリンクを参照してください

于 2012-11-15T15:22:24.660 に答える