我在哪里可以找到所有 C++ 十进制类型指示器?

Where could I find all the C++ decimal type indicator?

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

long l = 0L;

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

你不能。 C++ 中没有 unsigned shortshort 文字这样的东西。

您需要使用 static_cast

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

您提到的这个指标称为后缀

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

  1. unsigned-suffix — 字符 u 或字符 U
  2. long-suffix — 字符 l 或字符 Llong-long-suffix — 字符序列 ll 或字符序列 LL.

对于整型字面量,可以组合这些后缀,例如ulull,在同一个字面量中实现"unsignednes"和"longness"。

浮点类型也有后缀: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;

我已经使用此代码段检查它是否有效:

#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 literals, Floating point literal, User-defined literal

短名单是:

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/

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

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


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

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

这些表示的确切类型取决于字面值的大小,但是如果你查看 table 7,你会发现没有后缀可以给你一个 unsigned short盒子。


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

  • flFL中的任意一个。

f/F表示floatl/L表示long double。没有后缀表示 double.