0

auto を使用して変数番号を作成し、cin.get を使用して値を取得しました。私はそうするためにこのコードを使用しました:

auto number = cin.get();
cout << typeid(number).name() << endl; 

2147483647 を超える数値を入力しても、値には引き続き int 型が割り当てられるようです。どうしてこれなの?数値が最大 32 ビットの int 値を超える場合、auto は long 型の値を割り当てるべきではありませんか?

4

4 に答える 4

3

autoはコンパイル時に解決され、 の戻り値の型に基づいて決定されますcin.get()(これはたまたまint 定義によるものです)。

さらに、式typeid(number).name()はコンパイル時にも評価されます。つまり、コンパイラはこれを定数値 (たとえば、"i"私のシステム用) に解決し、それを実行可能ファイルに格納します。

于 2015-01-11T01:20:58.520 に答える
2

autoコンパイル時に解決されます。を返すため、コンパイラはそれnumberが型であると推測しました。intstd::istream::getint

これが問題になる場合は、long longここで明示的に使用してください。

于 2015-01-11T01:16:52.297 に答える
1

だからauto何も変わらない。また、実際に入力を解析して、それが数値であるかどうかを確認することもistream::get()ありません。istream::getline()

しかし、いくつかのオプションを見てみましょう:

cin.get()

これは、入力ストリームの 1 文字を表す int を返します。ただし、数字ではなく文字を表します。

cin.getline()

これはエラーです。引数を期待し
ないオーバーロードはありません。istream::getline()

char s[100]; cin.getline(s, 100);

これにより、入力の 1 行 (長すぎる場合は 100 文字) が格納され、string に格納されますs

于 2015-01-11T01:27:51.693 に答える
0

すでに述べたことに加えてauto

ここで「2147483647を超える数字を入力する」ことはできません。フォーマットされていない入力cin.get()です。あなたはbytesを読んでおり、バイト ( と仮定) は までしか上がりません。を返すのはそのためです。それ以上の値になることはありません。これまで。CHAR_BIT==8255cin.get()int

于 2015-01-11T02:01:31.167 に答える