Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为整数指定无符号字符存储 在现代C++中,可以指定整数数字到字符的存储吗?_C++_Literals - Fatal编程技术网

为整数指定无符号字符存储 在现代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@phuclv
uint8\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;