我在哪里可以找到所有C ++十进制类型指示符,如
long l = 0L;
我也知道L U f d。还有其他人吗?我在哪里可以找到它们?如何明确指出未签名的短片?
您引用的此指示符称为后缀。
对于整数类型,有两种类型的后缀:
u
或字符U
l
或字符L
或long-long-suffix - 字符序列ll
或字符序列LL
。对于整数文字,您可以组合这些后缀,例如ul
或ull
,以在同一文字中实现“unsignednes”和“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;
}
有关我的答案中提到的事情的更多信息,我建议查看cppreference:Integer literals,Floating point literal,User-defined literal
你不能。在C ++中没有unsigned short
或short
文字这样的东西。
你需要使用static_cast
。
参考:https://en.cppreference.com/w/cpp/language/integer_literal
一个简短的清单是:
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
这些表示的确切类型取决于字面值的大小,但是如果你查看table 7,你会发现没有后缀会给你一个开箱即用的unsigned short
。
为了完整性,这里是来自lex.fcon的浮点后缀:
f
,l
,F
,L
。f
/ F
表示float
,l
/ L
表示long double
。没有后缀意味着double
。