我能在哪里找到所有的C++十进制类型指示符,例如
long l = 0L;
我也知道L U f d这些,还有其他的吗?我在哪里可以找到它们?如何明确表示无符号短整型?
您提到的指标称为后缀。
对于整数类型,有两种类型的后缀:
u
或字符U
l
或字符L
或长长整型后缀——字符序列ll
或字符序列LL
。对于整数字面量,您可以结合这些后缀,例如使用ul
或ull
在同一字面量中实现"unsignedness"和"longness"。
浮点类型也有后缀:f
、F
、l
或L
之一。
double
f
或F
定义为float
l
或L
定义为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;
}
unsigned short
或者 short
字面值在C++中。你需要使用 static_cast
。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/
您可以在lex.literal中找到完整的内置文字词缀列表。
我想引用完整的表格,但我们没有Markdown支持,因此这里是后缀列表:
来自lex.icon/2的整数后缀:
u
或 U
l
或 L
u
或 U
和 l
或 L
ll
或 LL
u
或 U
和 ll
或 LL
这些后缀具体表示的类型取决于字面值的大小,但如果你查看表格 7,你会发现没有后缀可以直接得到一个unsigned short
。
为了完整起见,这里是来自lex.fcon的浮点数后缀:
f
,l
,F
,L
。f
/F
表示 float
,l
/L
表示 long double
。没有后缀表示 double
。
unsigned short
字面量,请参考此帖子。 - lubgrstd::map<std::string, unsigned int>
作为类型?否则在使用时会得到一堆类型转换。 - Bathshebastatic_cast<WORD>(0)
。对于这些 typedef 的类型最好保持准确,因为有时会有预处理器条件来切换类型。我不认为 WORD 会发生这种情况,但在我看来,静态转换到类型是一个好习惯。 - Chris Rollins