为整数指定无符号字符存储 在现代C++中,可以指定整数数字到字符的存储吗?
我想写为整数指定无符号字符存储 在现代C++中,可以指定整数数字到字符的存储吗?,c++,literals,C++,Literals,我想写autovar=255将var初始化为无符号字符类型 可以指定其他类型的存储: auto var_ulong = 255ul; auto var_float = 255.f; 但是,不是短的还是短的?当然,我遗漏了一些东西…没有标准的整数文字来做您想要做的事情,但是如果您计划经常这样做,您可以添加自己的整数文字: namespace foo { // constexpr pre C++20 // | // V consteval unsigned char operator&qu
autovar=255
将var初始化为无符号字符类型
可以指定其他类型的存储:
auto var_ulong = 255ul;
auto var_float = 255.f;
但是,不是短的还是短的?当然,我遗漏了一些东西…没有标准的整数文字来做您想要做的事情,但是如果您计划经常这样做,您可以添加自己的整数文字:
namespace foo {
// constexpr pre C++20
// |
// V
consteval unsigned char operator"" _uchar(unsigned long long x) {
return static_cast<unsigned char>(x);
}
}
请注意,正常的整数提升仍然有效,因此在下面,您将得到一个int
:
auto var_int = 55_uchar + 10_uchar;
如果你知道你想要什么类型,你可以直接声明这个类型。。你可以施放,但这样就无法使用
auto
。也许用户定义的文字会起作用。刚查过。它可以工作,但它只是一个美化的类型转换。没有任何short或char后缀,因为表达式中的所有内容都将提升为int,因此这些后缀将是useless@phuclv初始化一个变量是可行的,就像OP想做的那样consteval unsigned char操作符“”uchar(unsigned long long x){return static_ucast(x)}
然后auto var_uchar=255_uchar代码>将生成<代码> Valuuchar < /C> >代码>未签名char <代码>。我的简单测试看起来像“代码> CONTXPROUTIN8LT操作符”“uUC(未签名长long int){返回STATICOSTCAST(n));},并在C++ 17中工作。也就是说,在这种情况下,我只能避免使用auto
。当我能负担得起任何惊喜时,我不会使用auto
。它仍然比uint8\u t var=255
though@phuclvuint8\u t
是可选类型。它甚至不需要存在。此外,\uchar
部分是用户定义的。您可以将其设置为consteval unsigned char operator”“\u C(unsigned long x)我知道用户定义的文字,但是short x=1
和char x=1
仍然比auto x=1_s
和auto x=1_C
短,我不明白你的意思。我在回答OP:s的请求“我想写auto-var=255;
将var
初始化为无符号字符
类型…可以指定其他类型的存储:auto-var\u-float=255.f;
”因此,unsigned char
没有这样的文本,但是可以生成用户定义的文本,并给出了OP询问的特定类型的示例。问题出在哪里?这不是OP的要求,我想我已经回答了OP的问题。你不觉得吗?
auto var_int = 55_uchar + 10_uchar;