1)语句如
cout << 3.0 + 3 ;
,如何知道传递给cout的值是int还是float?
答案 0 :(得分:3)
它既不是。这是双倍的。 3.0
的类型为double,3
被提升为加倍的双倍;将double添加到double的结果是double。这与结果的完成无关。
ostreams有一堆重载的shift-left操作符,右边有一个double类型的参数,所以这就是所谓的:
template <class Elem, class Traits>
basic_ostream<Elem, Traits>& basic_ostream<Elem, Traits>::operator<<(double d);
对于它的价值,这是一个成员函数,而不是一个自由函数。
答案 1 :(得分:1)
它通过利用重载来实现这一点
ostream& operator<<(ostream& output, int i) {
// It's an int
}
ostream& operator<<(ostream& output, float f) {
// it's a float
}
C ++编译器将根据输入类型选择<<
运算符的相应重载。如果您传递float
,则会选择float
的重载,int
答案 2 :(得分:0)
3.0 + 3
操作的结果是双倍的,因此cout将应用&lt;&lt;双重类型的运算符。
答案 3 :(得分:0)
您可以使用调试器的Step into功能来确定这一点。在哪种cout方法中它将输入它是你的答案