2016-01-30 1 views
-1

Просто найдите это :-) Если вы укажете 0f, значение будет интерпретировано как восьмеричный целочисленный литерал. Таким образом, f (десятичный 15) не допускается. 00f и .f тоже не работают. Единственными способами, которые работают, являются 0.f и .0f. Есть ли другие способы? Тем не менее, я не могу понять, почему работает 0.f. Является 0 интерпретируется как восьмеричный префикс? C++, безусловно, сложный, даже очень фундаментальный синтаксис ~> _ < ~Синтаксис для указания нулевого плавающего литерала

+1

'f' не является действительным восьмеричным литералом, поэтому я сомневаюсь, что он интерпретируется как один в 0f. см.: http://coliru.stacked-crooked.com/a/84659236f8609846 – NathanOliver

+3

Предлагаю вам ознакомиться с документацией по [литералам] (http://en.cppreference.com/w/cpp/language/floating_literal) – NathanOliver

+0

@NathanOliver [clang] (http://melpon.org/wandbox/permlink/wgAlNOQOgJfNJALU), похоже, предполагает, что 'f' в' 0f' интерпретируется как десятичное '15'. – Lingxi

ответ

5

Тем не менее, я не могу понять, почему 0.f

Это работает, потому что . персонаж делает его плавающим точечный литерал. Литерал с плавающей запятой с f - это float. Дробная часть является необязательной и равна нулю, если ее не указывать.

Из-за синтаксиса 0.X для значений между 0..1 вы не можете иметь восьмеричные литералы с плавающей запятой.

Является ли 0 интерпретируемым как восьмеричный префикс?

В случае целых литералов да, 0 префикс является синтаксисом для восьмеричного литерала. Например: 01 - восьмеричный, 0x1 - шестнадцатеричный, а 1 - десятичный.

+0

Итак, в '0.x',' 0' не интерпретируется как восьмеричный префикс, а нуль? – Lingxi

+2

@ Lingxi да, восьмеричный префикс применяется только к целочисленным литералам - тем, у кого нет. – user2079303

 Смежные вопросы

  • Нет связанных вопросов^_^