6

私は次のような教科書を読んでいます。

C++ は、プログラムのソース コードに入力するすべての浮動小数点数 (7.33 や 0.0975 など) をデフォルトで double 値として扱います。

これは少し奇妙で、聞いたことがありません。無駄に見える?指定しないのに、なぜ余分な精度が得られるのでしょうか? 同じことを意味する 2 つの異なる型があるのはなぜですか? ロングダブルはどうですか?

4

3 に答える 3

20

これは言語仕様の一部です。double が必要な場合は、次のように記述します。

auto a = 12.3;

float が必要な場合は、次のように記述します。

auto a = 12.3f;

long double が必要な場合は、次のように記述します。

auto a = 12.3L;

出典: MSDN

トピック全体は、章の C++ 標準で広範に説明されています2.14 Literals

于 2013-06-25T08:19:00.677 に答える
7

これは、浮動小数点リテラルのみを参照しています。

これは、コードに記述した整数は常に (signed) として扱われると言っているのと同じですint。これを変数に割り当てるとすぐに、変数の型が取得されます。

ただし、計算でスタンドアロンのリテラルを使用すると、その計算のリテラルの型が取得され、暗黙的な型変換がトリガーされる可能性があります。

float f = 3.141;    // f is of type float, even though the literal was double
auto d = f * 2.0;   // d will be of type double because of the literal 2.0
auto f2 = f * 2.0f; // f2 will be of type float again

2 行目の計算には 2 つの異なる型が含まれます。変数の型 fは ですfloatdoubleリテラルから構築されたとしても、変数の型が重要です。一方、リテラル の型は であるため、計算の暗黙的な変換がトリガーされます。したがって、実際の乗算は 2の乗算として実行されます。2.0doubledouble

スタンドアロンの値に特定の型を持たせたい場合は、一致するリテラルを使用します。

于 2013-06-25T08:26:29.820 に答える