【问题标题】:Is there any C++ style guide that talks about numeric literal suffixes?是否有任何关于数字文字后缀的 C++ 风格指南?
【发布时间】:2012-05-04 23:23:57
【问题描述】:

在我读过的所有 C++ 风格指南中,我从未见过任何关于数字文字后缀的信息(即3.14f0L 等)。

问题

  1. 是否有任何样式指南讨论那里的用法,或者是否有一般约定?

  2. 我在图形编程中偶尔会遇到f 后缀。编程领域的类型有没有使用趋势?

【问题讨论】:

  • 我不太确定您的问题是什么。您是在问数字文字后缀的含义,还是在问人们是否围绕它们的使用建立了一些约定?
  • @GregHewgill:我问的是人们是否已经建立了使用习惯。
  • 您在需要时使用它们。你需要一个float 常量吗?使用f 后缀。你需要一个unsigned 常量吗?使用u 常量。以此类推。

标签: c++ coding-style literals


【解决方案1】:

我知道的唯一已建立的约定(无论如何都已建立)是始终使用L 而不是l,以避免将其误认为1。除此之外,这几乎是在需要时使用所需的东西。

另请注意,C++ 11 允许用户定义的文字带有用户定义的后缀。

【讨论】:

  • 好答案,我正在寻找一个理由来更喜欢大写版本。
  • 好吧,我多年来一直使用小写版本,从来没有对此感到困惑,或者听说有人对此感到困惑..可能取决于使用的字体..我的反驳论点使用小写将是:它是更少的打字(保持移位)。我知道阅读代码更重要,但如果在我的(有限的)经验中阅读似乎并不重要,那么这是一个有效的论点。我也是长期 RSI 患者,所以像轮班这样的事情对我来说很重要。
【解决方案2】:

我没有找到通用的样式指南。我使用大写字母,我对使用 F 表示浮点文字和 L 表示 long double 很挑剔。我还为整数文字使用了适当的后缀。

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

对于整数:UunsignedLlongLLlong longULs 之间的顺序无关紧要,但我总是输入 UL,因为我声明了这样的变量 unsigned long

如果您将一种类型的变量分配给另一种类型的文字,或者为另一种类型的函数参数提供一种类型的数字文字,则必须进行强制转换。使用正确的后缀可以避免这种情况,并且与 static_cast 对调用强制转换很有用一样。一致地使用数字文字后缀是一种很好的风格,可以避免数字意外。

人们对小写还是大写最好有不同的看法。选择适合您的风格并保持一致。

【讨论】:

  • @bobobobo 我想是的......要么是那个,要么是 0ull。我更喜欢大写,因为“l”看起来像“1”。使用后缀对于 C++11 auto 尤其重要。
【解决方案3】:

CERT C Coding Standard 建议使用大写字母:

DCL16-C。使用“L”而不是“l”来表示长值

小写字母 l (ell) 很容易与数字 1 (one) 混淆。当指示整数文字常量是长值时,这可能会特别令人困惑。此建议类似于DCL02-C. Use visually distinct identifiers

同样,当指示整型文字常量是 long long 值时,您应该使用大写的 LL 而不是小写的 ll。

【讨论】:

    【解决方案4】:

    适用于 C++03 语言的 MISRA C++ 2008 在规则 M2-13-3 中声明(至少,正如 Autosar document 所引用的那样)

    “U”后缀应 适用于所有八进制或十六进制 无符号类型的整数文字。

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

    尽管如此,我还是找不到一条规则(但我手头没有 MISRA C++ 的硬拷贝)规定应在需要时使用后缀。但是,IIRC 在 MISRA C++ 中有一个(或者可能只是我以前的公司编码指南……)

    【讨论】:

      【解决方案5】:

      【讨论】:

      • 我一直在寻找权威来源,例如 Google C++ 样式指南等,它有一个既定的使用约定。您可以随心所欲地用 Google 搜索,但找不到任何东西,因为似乎不存在这样的东西。
      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 2014-07-04
      相关资源
      最近更新 更多