1) Когда такие заявления, как
cout << 3.0 + 3 ;
Как узнать, передано ли значение cout значение типа int или float?
Это ни то, ни другое. Это двойной. 3.0
имеет тип double, и 3
повышен до двойного за добавление; результат добавления двойного к двойному — двойной. Это не зависит от того, что делается с результатом.
Есть несколько перегруженных операторов сдвига влево для ostreams, и есть один для аргумента типа 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 ++ выберет соответствующую перегрузку <<
оператор на основе типов ввода. Если вы передаете float
он выберет перегрузку, которая имеет float
и то же самое для int
Результат 3.0 + 3
операция двойная, поэтому Cout будет применять << оператор для двойного типа.
Вы можете использовать шаг в функцию отладчика, чтобы определить это. В какой метод cout он будет входить это ваш ответ