Это зависит ... Вы можете сделать, например:
1)
float f = 3.14f;
В этом случае буква 3.14 явно указывается как float ... так что все ok
2)
float f = 3.14;
В этом случае 3.14 фактически является двойным, но переменная f объявляется как float ... поэтому при компиляции число будет сбрасывается в поплавок с прецизионными последствиями потери этого случая ...
Вы могли бы с c ++ 11
auto f = 3.14;
Или auto f {3,14};
В обоих случаях компилятор принимает точно тип литерала ... (оба являются двойными)