Просто найдите это :-) Если вы укажете 0f
, значение будет интерпретировано как восьмеричный целочисленный литерал. Таким образом, f
(десятичный 15
) не допускается. 00f
и .f
тоже не работают. Единственными способами, которые работают, являются 0.f
и .0f
. Есть ли другие способы? Тем не менее, я не могу понять, почему работает 0.f
. Является 0
интерпретируется как восьмеричный префикс? C++, безусловно, сложный, даже очень фундаментальный синтаксис ~> _ < ~Синтаксис для указания нулевого плавающего литерала
ответ
Тем не менее, я не могу понять, почему 0.f
Это работает, потому что .
персонаж делает его плавающим точечный литерал. Литерал с плавающей запятой с f
- это float
. Дробная часть является необязательной и равна нулю, если ее не указывать.
Из-за синтаксиса 0.X
для значений между 0..1 вы не можете иметь восьмеричные литералы с плавающей запятой.
Является ли 0 интерпретируемым как восьмеричный префикс?
В случае целых литералов да, 0
префикс является синтаксисом для восьмеричного литерала. Например: 01 - восьмеричный, 0x1 - шестнадцатеричный, а 1 - десятичный.
Итак, в '0.x',' 0' не интерпретируется как восьмеричный префикс, а нуль? – Lingxi
@ Lingxi да, восьмеричный префикс применяется только к целочисленным литералам - тем, у кого нет. – user2079303
'f' не является действительным восьмеричным литералом, поэтому я сомневаюсь, что он интерпретируется как один в 0f. см.: http://coliru.stacked-crooked.com/a/84659236f8609846 – NathanOliver
Предлагаю вам ознакомиться с документацией по [литералам] (http://en.cppreference.com/w/cpp/language/floating_literal) – NathanOliver
@NathanOliver [clang] (http://melpon.org/wandbox/permlink/wgAlNOQOgJfNJALU), похоже, предполагает, что 'f' в' 0f' интерпретируется как десятичное '15'. – Lingxi