所有花车都是双打?

joh*_*ers 6 c++

我正在读教科书,上面写道:

C++默认将您在程序源代码中输入的所有浮点数(例如7.33和0.0975)视为double值.

我发现这有点奇怪,从未听说过.似乎浪费了?如果不指定,为什么要获得额外的精度?为什么有两种不同的类型意味着相同的东西?长双人怎么样?

Spo*_*ook 20

这是语言规范的一部分.如果你想要一个双,写:

auto a = 12.3;
Run Code Online (Sandbox Code Playgroud)

如果你想要一个浮点数,写:

auto a = 12.3f;
Run Code Online (Sandbox Code Playgroud)

如果你想要一个长双,写:

auto a = 12.3L;
Run Code Online (Sandbox Code Playgroud)

资料来源:MSDN

整个主题在C++标准的章节中有详细描述2.14 Literals.


Com*_*sMS 7

这仅指浮点文字.

这与您在代码中编写的任何整数都被视为(带符号)的情况相同int.只要将其赋值给变量,就会得到变量的类型.

但是,在计算中使用独立文字时,您将获得该计算的文字类型,可能会触发隐式类型转换:

float f = 3.141;    // f is of type float, even though the literal was double
auto d = f * 2.0;   // d will be of type double because of the literal 2.0
auto f2 = f * 2.0f; // f2 will be of type float again
Run Code Online (Sandbox Code Playgroud)

第二行的计算涉及两种不同的类型:变量类型ffloat.即使它是从double文字构造的,变量的类型也是重要的.另一方面,文字类型2.0double因此触发计算的隐式转换.因此,实际乘法作为2的乘法执行double.

如果希望独立值具有特定类型,请使用匹配的文字.

  • 究竟.[相当](http://en.cppreference.com/w/cpp/language/character_literal)[数字](http://en.cppreference.com/w/cpp/language/floating_literal) [of]( http://en.cppreference.com/w/cpp/language/string_literal)( suffixes)(http://en.cppreference.com/w/cpp/language/integer_literal)用于不同的文字.在C++ 11中,您甚至可以[定义自己的](http://en.cppreference.com/w/cpp/language/user_literal). (2认同)