Этот вопрос закрыт для ответов, так как повторяет вопрос Перегрузка функций с unsigned параметром и обычным?

Компилятор понимает какой тип данных вы ему подаёте на вход?

main() {
  int a = 7;
  float x;
  x = a / 4;
}


x = a / 4; где тип для a мы явно указали в самом начале, а четвёрку мы из головы придумали, компилятор анализирует такие числа, и понимает сам что на вход мы ему подаём, он умный?
  • Вопрос задан
  • 133 просмотра
Ответы на вопрос 3
vt4a2h
@vt4a2h
Senior software engineer (C++/Qt/boost)
Да.

Это целочисленный литерал с точки зрения языка. Суффикс может уточнить тип, например 1u указывает, что это беззнаковый целый тип, а 1.f что это число с плавающей точкой (единичной точности), а 1.d двойной.

Кроме того, результирующей тип выражения будет определятся на основе типа операндов. Например, в вашем коде "a / 4" -- это int, а "a / 4.d" уже double. Поэтому, когда вы посмотрите содержимое x, то можете быть немного удивлены.

Если вы задаёте все эти вопросы не с целью потроллить, то прочтите вот эту тонюсенькую книжечку: https://www.amazon.com/Programming-Language-2nd-Br... . Около 300 страниц всего; русская версия тоже есть.
Ответ написан
Да, компилятор анализирует константы. В данном случае он воспринимает 4 как целое число. А если бы было написано 4.0, то считал бы его вещественным (float или double, например).

И есть список правил, в котором типам операндов и операции сопоставляется тип результата.
Ответ написан
Griboks
@Griboks
Если идентификатор начинается с буквы - это переменная, если с цифры - число. Доволен составим шаблоны форматов чисел и проверим до первого совпадения.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы