如何确定表达式的值的类型?

时间:2012-10-20 17:49:39

标签: c++ types expression cout

1)语句如

cout << 3.0 + 3 ; 

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

4 个答案:

答案 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方法中它将输入它是你的答案