有没有关于数字字面量后缀的 C++ 风格指南?

12

在我阅读的所有C++风格指南中,从未看到有关数字字面量后缀的信息(即3.14f0L等)。

问题

  1. 是否有任何风格指南讨论了它们的用法,或者存在一般约定?

  2. 我偶尔在图形编程中遇到f后缀。在这类编程领域中使用它们的趋势是否存在?


我不太确定你的问题是什么。你是在问数字字面量后缀的含义,还是在问人们是否已经建立了一些关于它们使用的惯例? - Greg Hewgill
@GregHewgill:我在询问人们是否已经建立了对它们使用的约定。 - Jesse Good
5
当你需要使用它们时才使用它们。你需要一个float常量吗?使用一个f后缀。你需要一个unsigned常量吗?使用一个u常量。依此类推。 - James McNellis
5个回答

10

我所知道的唯一已经确立的(尽管有些确立)惯例是始终使用 L 而非 l,以避免其被误认为是 1。除此之外,它基本上是关于在需要时使用所需内容的问题。

另外请注意,C ++ 11 允许使用用户定义的后缀的用户定义字面值。


好的回答,我正在寻找偏爱大写版本的理由。 - nowox
嗯,我已经使用小写版本多年了,从来没有因此产生过任何困惑,也没有听说过有人因此感到困惑。可能这取决于所使用的字体。我使用小写字母的反驳是:打字更少(不需要按住Shift键)。我知道阅读代码更重要,但如果在我的(有限的)经验中似乎并不重要,那么这是一个有效的论点。我也是一位长期的RSI患者,所以像按住Shift这样的事情对我很重要。 - Emile Vrijdags

6

我没有找到通用的样式指南。我使用大写字母,并且非常注重在浮点文字中使用F和长双倍精度浮点型时使用L。我还使用适当的后缀来表示整数文字。

我假设您知道这些后缀的含义:3.14Ffloat文字,12.345是double文字,6.6666L是long double文字。

对于整数:U表示unsignedL表示longLL表示long longUL之间的顺序无关紧要,但我总是使用UL,因为我将这样的变量声明为unsigned long

如果您将一个类型的变量赋值给另一种类型的文字,或者为另一种类型的函数参数提供数字文字,则必须进行转换。 使用适当的后缀可以避免此问题,并且与调用出现转换的static_cast相同,因此这是有用的。 一致使用数字文字后缀是良好的风格,可以避免数字上的意外。

人们有所不同,关于是选用大小写字母更佳。选择一个适合自己的样式,并保持一致。


1
@bobobobo 我也这么认为……要不就是0ull。我倾向于使用大写字母,因为'l'看起来像'1'。在使用C++11 auto时,使用后缀尤其重要。 - emsr

4

CERT C编码标准建议使用大写字母:

DCL16-C. 使用 "L," 而不是 "l," 表示长整型数值

小写字母 l(Elle)很容易与数字 1(one)混淆。当表示整数字面常量为长整型时,这可能会特别令人困惑。此建议类似于 DCL02-C. 使用视觉上区分的标识符

同样,在表示整数字面常量为长长整型时,应使用大写字母 LL,而不是小写字母 ll。


0

针对 C++03 语言的 MISRA C++ 2008 规定在规则 M2-13-3 中(至少是由此Autosar文件引用):

所有无符号类型的八进制或十六进制整数字面量均应添加“U”后缀。

链接文档还将其与 JSF-AV 2005 和 HIC++v4.0 进行了比较,这四个标准都要求后缀为大写字母。

然而,我找不到一个规则(但手头没有MISRA C ++的硬拷贝),指出必须在需要时使用后缀。然而,如果我没记错,MISRA C++ 中有一个规则(或者可能只是我的以前公司编码指南……)


-3

我一直在寻找权威的来源,例如 Google C++ 风格指南等,以便了解它们的使用惯例。你可以尽情搜索,但是似乎并没有这样的东西存在。 - Jesse Good

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接