1)当语句如
cout << 3.0 + 3 ;
是,如何知道传递给 cout 的值是 int 还是 float?
两者都不是。是双倍的。3.0
具有 double 类型,并3
被提升为 double 以进行加法;将双精度加到双精度的结果是双精度。这与对结果所做的事情无关。
ostream 有一堆重载的左移运算符,右侧有一个用于 double 类型的参数,所以这就是所谓的:
template <class Elem, class Traits>
basic_ostream<Elem, Traits>& basic_ostream<Elem, Traits>::operator<<(double d);
对于它的价值,这是一个成员函数,而不是一个自由函数。
它通过利用重载来做到这一点
ostream& operator<<(ostream& output, int i) {
// It's an int
}
ostream& operator<<(ostream& output, float f) {
// it's a float
}
C++ 编译器将<<
根据输入类型选择适当的运算符重载。如果您通过 afloat
它将选择具有 afloat
和相同的重载int
运算结果3.0 + 3
是 double 因此 cout 将对 double 类型应用 << 运算符。
您可以使用调试器的 Step into 功能来确定这一点。它将进入哪个 cout 方法是你的答案