4

coutオブジェクトにcharを送信するたびに、intにキャストしない限り、ASCII文字で表示されます。

Q:明示的なキャストなしでcharの数値を表示する方法はありますか?

コードでキャストを多すぎると、(プログラムの)整合性が失われる可能性があることをどこかで読みました。特別な理由でcharsがASCIIで表示されると思いますが、理由はわかりません。

私は基本的にゲームを作成しています。コンソールに表示する予定の小さな数字(unsigned chars)を使用しています。私はパラノイアかもしれませんがstatic_cast<int>、コードのいたるところにスパムを送信するたびに、この不安感を覚えます。

4

2 に答える 2

5

ただし、型キャストには何の問題もありません。特に、型キャストを使用static_castする場合はなおさらです。それはあなたが使うべきものです。これにより、コンパイラーは型キャストを検証し、安全であることを確認できます。

演算子の動作を変更するには、値のデフォルトの演算子<<をオーバーライドする必要があります。例:<<char

std::ostream& operator <<(std::ostream &os, char c)
{
    os << static_cast<int>(c);
    return os;
}

char c = ...;
std::cout << c;

入力としてを受け取るカスタムタイプを作成してから、そのタイプの演算子をchar実装できます。例:<<

struct CharToInt
{
    int val;
    CharToInt(char c) : val(static_cast<int>(c)) {}
};

std::ostream& operator <<(std::ostream &os, const CharToInt &c)
{
    os << c.val;
    return os;
}

char c = ...;
std::cout << CharToInt(c);

<<同様のことを行う関数を作成できます。その場合、演算子をオーバーライドする必要はありません。例:

int CharToInt(char c)
{
    return c;
}

char c = ...;
std::cout << CharToInt(c);
于 2012-06-28T01:07:04.297 に答える
0

物事が進むにつれて、これはキャストの合理的な使用法ですが、はい、それは改善することができます。関連する「整合性の喪失」は、データ型の1つがcharからdoubleに変更された場合、キャストはコンパイルを続行しますが、おそらく希望どおりに実行されないことです。代わりにヘルパー関数を作成できます。

inline int to_int(char c) { return static_cast<int>(c); }

static_castとは異なり、これは元のタイプがである場合にのみ開始されるため、コンパイラの警告が表示charされるようなものに変更した場合は、事実上、コードを確認するように通知されます。double

于 2012-06-28T01:01:46.720 に答える