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

问题描述 投票:6回答:4

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

long l = 0L;

我也知道L U f d。还有其他人吗?我在哪里可以找到它们?如何明确指出未签名的短片?

c++ keyword
4个回答
7
投票

您引用的此指示符称为后缀。

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

  1. unsigned-suffix - 字符u或字符U
  2. long-suffix - 字符l或字符L或long-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 literalsFloating point literalUser-defined literal


4
投票

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

你需要使用static_cast

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


1
投票

一个简短的清单是:

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

这里有前缀和后缀的好文档:https://www.geeksforgeeks.org/integer-literal-in-c-cpp-prefixes-suffixes/


0
投票

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

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


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

  • (没有后缀)
  • uU
  • lL
  • uUlL
  • llLL
  • uUllLL

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


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

  • 任何一个flFL

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

© www.soinside.com 2019 - 2024. All rights reserved.