哪里可以找到所有的 C++ 十进制类型指示符?

6

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

long l = 0L;

我也知道L U f d这些,还有其他的吗?我在哪里可以找到它们?如何明确表示无符号短整型?


关于 unsigned short 字面量,请参考此帖子 - lubgr
请查看此链接此链接 - HolyBlackCat
@lubgr,实际上我想优雅地解决这个警告:map<string,unsigned short> m; m.insert(make_pair("", 0)); //可能会丢失数据。我在你给出的线程中找到了0ui16,这对我很有帮助,谢谢 :) - Zhang
@张:出于好奇,为什么你不能使用 std::map<std::string, unsigned int> 作为类型?否则在使用时会得到一堆类型转换。 - Bathsheba
@Bathsheba,我只是在维护我们的旧项目。它实际上是 WORD - Windows API 中使用的一种类型。 - Zhang
1
你应该使用 static_cast<WORD>(0)。对于这些 typedef 的类型最好保持准确,因为有时会有预处理器条件来切换类型。我不认为 WORD 会发生这种情况,但在我看来,静态转换到类型是一个好习惯。 - Chris Rollins
4个回答

7

您提到的指标称为后缀

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

  1. 无符号后缀——字符u或字符U
  2. 长整型后缀——字符l或字符L长长整型后缀——字符序列ll或字符序列LL

对于整数字面量,您可以结合这些后缀,例如使用ulull在同一字面量中实现"unsignedness"和"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:整型字面值浮点数字面值用户定义字面值


2
太好了,我喜欢这个。 - Zhang

4

2
用户定义字面量怎么样? - Chris Rollins

1

0

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

我想引用完整的表格,但我们没有Markdown支持,因此这里是后缀列表:


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

  • (无后缀)
  • uU
  • lL
  • 同时使用 uUlL
  • llLL
  • 同时使用 uUllLL

这些后缀具体表示的类型取决于字面值的大小,但如果你查看表格 7,你会发现没有后缀可以直接得到一个unsigned short


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

  • 任意一个 flFL

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


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