0

1)当语句如

cout << 3.0 + 3 ; 

是,如何知道传递给 cout 的值是 int 还是 float?

4

4 回答 4

3

两者都不是。是双倍的。3.0具有 double 类型,并3被提升为 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++ 编译器将<<根据输入类型选择适当的运算符重载。如果您通过 afloat它将选择具有 afloat和相同的重载int

于 2012-10-20T17:55:38.680 回答
0

运算结果3.0 + 3是 double 因此 cout 将对 double 类型应用 << 运算符。

于 2012-10-20T17:59:03.983 回答
0

您可以使用调试器的 Step into 功能来确定这一点。它将进入哪个 cout 方法是你的答案

于 2012-10-20T18:17:26.493 回答