C ++后缀L vs指定long double

时间:2017-12-06 16:05:17

标签: c++

问题What does the "L" mean at the end of an integer literal?描述了L在int literal末尾的含义。我很困惑为什么不指定long int i = 33而不是int i = 33L?同样的事情适用于其他类型。而不是指定double b = 3.0L为什么不写long double

2 个答案:

答案 0 :(得分:2)

  

我很困惑为什么不指定long int i = 33而不是int i = 33L?

因为这两个陈述意味着两件不同的事情:

long int i = 33; // take constant of type int, convert it to long int and assign to i.

int i = 33L; // take constant of type long int, convert it to int and assign to i.

所以你最终得到了不同类型的变量i。对于示例中的double,也是如此。

答案 1 :(得分:1)

虽然在许多情况下,您可以依赖极其明确定义的扩展转换规则,但有时您需要明确说明文字的类型

例如

long double f = 1.0;
f = std::max(f, 2.0L);
除非max的参数具有相同的类型,否则

不会编译。写double b = 3.0L确实毫无意义,编译器几乎肯定会忽略你并编译double b = 3.0