0

1) 次のような場合

cout << 3.0 + 3 ; 

cout に渡された値が int か float かをどうやって知るのでしょうか?

4

4 に答える 4

3

どちらでもない。ダブルです。3.0型 double を持ち3、加算のために double に昇格されます。double に double を追加した結果は double です。それは、結果に対して行われていることとは無関係です。

ostream には多数のオーバーロードされた左シフト演算子があり、右側には double 型の引数用の演算子があるため、次のように呼び出されます。

template <class Elem, class Traits>
basic_ostream<Elem, Traits>& basic_ostream<Elem, Traits>::operator<<(double d);

価値があるのは、それはメンバー関数であり、フリー関数ではありません。

于 2012-10-20T18:04:28.340 に答える
1

オーバーロードを利用してこれを行います

ostream& operator<<(ostream& output, int i) {
  // It's an int
}

ostream& operator<<(ostream& output, float f) {
  // it's a float
}

C++ コンパイラは<<、入力の型に基づいて演算子の適切なオーバーロードを選択します。a を渡すと、 aと for が同じfloatオーバーロードが選択されますfloatint

于 2012-10-20T17:55:38.680 に答える
0

操作の結果3.0 + 3はdoubleであるため、coutはdouble型に<<演算子を適用します。

于 2012-10-20T17:59:03.983 に答える
0

これを決定するには、デバッガーのステップイン機能を使用できます。どのcoutメソッドに入力するかがあなたの答えです

于 2012-10-20T18:17:26.493 に答える