在我阅读的所有C++风格指南中,从未看到有关数字字面量后缀的信息(即3.14f
,0L
等)。
问题
是否有任何风格指南讨论了它们的用法,或者存在一般约定?
我偶尔在图形编程中遇到
f
后缀。在这类编程领域中使用它们的趋势是否存在?
在我阅读的所有C++风格指南中,从未看到有关数字字面量后缀的信息(即3.14f
,0L
等)。
问题
是否有任何风格指南讨论了它们的用法,或者存在一般约定?
我偶尔在图形编程中遇到f
后缀。在这类编程领域中使用它们的趋势是否存在?
我所知道的唯一已经确立的(尽管有些确立)惯例是始终使用 L
而非 l
,以避免其被误认为是 1
。除此之外,它基本上是关于在需要时使用所需内容的问题。
另外请注意,C ++ 11 允许使用用户定义的后缀的用户定义字面值。
我没有找到通用的样式指南。我使用大写字母,并且非常注重在浮点文字中使用F和长双倍精度浮点型时使用L。我还使用适当的后缀来表示整数文字。
我假设您知道这些后缀的含义:3.14F
是float
文字,12.345是double文字,6.6666L是long double文字。
对于整数:U
表示unsigned
,L
表示long
,LL
表示long long
。 U
和L
之间的顺序无关紧要,但我总是使用UL
,因为我将这样的变量声明为unsigned long
。
如果您将一个类型的变量赋值给另一种类型的文字,或者为另一种类型的函数参数提供数字文字,则必须进行转换。 使用适当的后缀可以避免此问题,并且与调用出现转换的static_cast相同,因此这是有用的。 一致使用数字文字后缀是良好的风格,可以避免数字上的意外。
人们有所不同,关于是选用大小写字母更佳。选择一个适合自己的样式,并保持一致。
CERT C编码标准建议使用大写字母:
DCL16-C. 使用 "L," 而不是 "l," 表示长整型数值
小写字母 l(Elle)很容易与数字 1(one)混淆。当表示整数字面常量为长整型时,这可能会特别令人困惑。此建议类似于 DCL02-C. 使用视觉上区分的标识符。
同样,在表示整数字面常量为长长整型时,应使用大写字母 LL,而不是小写字母 ll。
针对 C++03 语言的 MISRA C++ 2008 规定在规则 M2-13-3 中(至少是由此Autosar文件引用):
所有无符号类型的八进制或十六进制整数字面量均应添加“U”后缀。
链接文档还将其与 JSF-AV 2005 和 HIC++v4.0 进行了比较,这四个标准都要求后缀为大写字母。
然而,我找不到一个规则(但手头没有MISRA C ++的硬拷贝),指出必须在需要时使用后缀。然而,如果我没记错,MISRA C++ 中有一个规则(或者可能只是我的以前公司编码指南……)
float
常量吗?使用一个f
后缀。你需要一个unsigned
常量吗?使用一个u
常量。依此类推。 - James McNellis