【问题标题】:Where could I find all the C++ decimal type indicator?我在哪里可以找到所有 C++ 十进制类型指示器?
【发布时间】:2019-04-09 08:33:57
【问题描述】:

我在哪里可以找到所有 C++ 十进制类型指示符,例如

long l = 0L;

我也知道 L U f d。还有其他人吗?我在哪里可以找到它们?如何明确指示无符号短?

【问题讨论】:

  • 对于 unsigned short 文字,请参阅 this thread
  • thisthis
  • @lubgr,其实我想优雅地解决这个警告:map m; m.insert(make_pair("", 0)); // 可能丢失数据。我只是在你给定的线程中找到 0ui16,这对我有好处,谢谢 :)
  • @Zhang:出于兴趣,为什么不能使用std::map<std::string, unsigned int>作为类型?否则,您将在使用时获得大量类型转换。
  • 你应该使用static_cast<WORD>(0)。这些 typedef 的类型最好是准确的,因为有时会有预处理器条件切换类型。我认为 WORD 不会发生这种情况,但将静态转换为 imo 类型只是一个好习惯。

标签: c++ keyword


【解决方案1】:

你所指的这个指标叫做后缀

对于整数类型,有两种类型的后缀:

  1. 无符号后缀 — 字符 u 或字符 U
  2. long-suffix — 字符 l 或字符 Llong-long-suffix — 字符序列 ll 或字符序列 LL .

对于整数字面量,您可以组合这些后缀,例如ulull,以在同一个字面量中同时实现“无符号”和“长度”。

浮点类型也有后缀:fFlL 之一

  1. 没有后缀的文字定义double
  2. fF 定义 float
  3. lL 定义 long double

还有自定义字面量,可以引入自定义后缀。

关于unsigned short 的第二个问题:short 没有明确的后缀,因此您将不得不使用static_cast 或C 样式转换。

另一种方法是像这样定义一个用户定义的文字运算符

unsigned short operator "" _ush(unsigned long long int a)
{
    return static_cast<unsigned short>(a);
}

然后用它来定义像这样的字面量:unsigned short a = 123_ush;

我已经检查过它是否可以使用这个 sn-p:

#include <iostream>
#include <string>
#include <typeinfo>

unsigned short operator "" _ush(unsigned long long int a)
{
    return static_cast<unsigned short>(a);
}

int main()
{
  std::string name;
  bool equal = typeid(decltype(123_ush)) == typeid(unsigned short); // check that literal is indeed unsigned short
  std::cout << equal;
}

有关我的回答中提到的事情的更多信息,我建议查看 cppreference:Integer literalsFloating point literalUser-defined literal

【讨论】:

  • 太好了,我喜欢这个。
【解决方案2】:

你不能。 C++ 中不存在 unsigned shortshort 文字。

您需要使用static_cast

参考:https://en.cppreference.com/w/cpp/language/integer_literal

【讨论】:

【解决方案3】:

一个简短的列表是:

1.0 => double
1.0f => float
1 => int
1U => unsigned int
1L => long
1UL => unsigned long
1ULL => unsigned long long
1LL => long long

这里是 prefixessuffixes 的好文档: https://www.geeksforgeeks.org/integer-literal-in-c-cpp-prefixes-suffixes/

【讨论】:

    【解决方案4】:

    您可以在lex.literal 中找到内置文字词缀的完整列表。

    我会引用完整的表格,但我们没有对此的降价支持,所以这里有一个后缀列表:


    来自lex.icon/2的整数后缀:

    • (无后缀)
    • uU
    • lL
    • uUlL 都有
    • llLL
    • uUllLL

    这些表示的确切类型取决于文字值的大小,但如果您查看table 7,您会发现没有任何后缀可以提供开箱即用的unsigned short


    为了完整起见,这里是来自lex.fcon的浮点后缀:

    • flFL 中的任意一个。

    f/F 表示floatl/L 表示long double。无后缀表示double

    【讨论】:

      猜你喜欢
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2023-04-10
      • 2015-02-23
      • 1970-01-01
      相关资源
      最近更新 更多