我在哪里可以找到所有 C++ 十进制类型指示器?
Where could I find all the C++ decimal type indicator?
我在哪里可以找到所有 C++ 十进制类型指示符,例如
long l = 0L;
我也认识L U f d。还有其他的吗?我在哪里可以找到它们?如何明确指示无符号短整型?
你不能。 C++ 中没有 unsigned short
或 short
文字这样的东西。
您需要使用 static_cast
。
参考:https://en.cppreference.com/w/cpp/language/integer_literal
您提到的这个指标称为后缀。
对于整数类型,有两种类型的后缀:
- unsigned-suffix — 字符
u
或字符 U
- long-suffix — 字符
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
短名单是:
1.0 => double
1.0f => float
1 => int
1U => unsigned int
1L => long
1UL => unsigned long
1ULL => unsigned long long
1LL => long long
这里有一个关于 prefixes 和 suffixes 的很好的文档:
https://www.geeksforgeeks.org/integer-literal-in-c-cpp-prefixes-suffixes/
您可以在 lex.literal 中找到完整的内置文字词缀列表。
我会引用完整的 table 但我们没有对此的降价支持,所以这里是后缀列表:
来自 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
.
我在哪里可以找到所有 C++ 十进制类型指示符,例如
long l = 0L;
我也认识L U f d。还有其他的吗?我在哪里可以找到它们?如何明确指示无符号短整型?
你不能。 C++ 中没有 unsigned short
或 short
文字这样的东西。
您需要使用 static_cast
。
参考:https://en.cppreference.com/w/cpp/language/integer_literal
您提到的这个指标称为后缀。
对于整数类型,有两种类型的后缀:
- unsigned-suffix — 字符
u
或字符U
- long-suffix — 字符
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
短名单是:
1.0 => double
1.0f => float
1 => int
1U => unsigned int
1L => long
1UL => unsigned long
1ULL => unsigned long long
1LL => long long
这里有一个关于 prefixes 和 suffixes 的很好的文档: https://www.geeksforgeeks.org/integer-literal-in-c-cpp-prefixes-suffixes/
您可以在 lex.literal 中找到完整的内置文字词缀列表。
我会引用完整的 table 但我们没有对此的降价支持,所以这里是后缀列表:
来自 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
.