Я наткнулся на этот туториал и никогда не сталкивался с таким синтаксисом: gp_Pnt aPnt1(-myWidth / 2., 0, 0);
. Я, вероятно, ищу не в том месте, но почему G++ принимает все 3 инициализации этих переменных?
double a = 2;
double b = 2.;
double c = 2.0;
Я не помню, чтобы встречал 2.
- это сокращение от 2.0
или они разные?
2.
и 2.0
одинаковы в том же смысле, что и 2.0
и 2.00
одинаковы.
они все одинаковые: 2. 2.0 2.0D 2.0d
Все они константные литеральные двойники. но 2.f
или 2.F
и 2.l
или 2.L
есть long double
.
Либо кто-то предпочитает «краткость», чем удобочитаемость, либо небольшая оговорка. 2.
и 2.0
являются литералами типа double
и имеют значение 2.0
. Грубо говоря, если кто-то заботится о удобочитаемости для людей, 2.0
предпочтительнее 2.
Согласно этой документации, существует шесть способов объявить литерал с плавающей запятой, три из которых используют десятичный формат и три используют шестнадцатеричный формат. Вот синтаксис для десятичного формата:
суффикс десятичной степени последовательности цифр (необязательно) (1)
последовательность цифр . десятичный показатель (необязательно) суффикс (необязательно) (2)
последовательность цифр (необязательно) . десятичный показатель степени последовательности цифр (необязательно) суффикс (необязательно) (3)
2
в double a = 2;
использует неявное преобразование из целочисленного литерала в литерал с плавающей запятой.2.
в double b = 2.;
использует синтаксис (2)
.2.0
в double c = 2.0
использует синтаксис (3)
.Насколько я знаю, смысловых различий нет.
«Неявное приведение» -> «неявное преобразование». Приведения по определению являются явными преобразованиями.
2
— это int
буквальное.
2.
и 2.0
идентичны и являются double
литералами. Первая — это просто укороченная версия.
2.f
и 2.0f
идентичны и являются float
литералами.
2.
и2.0
— одно и то же значение и один и тот же тип.