如何在 C + + 中指定无符号字符类型的整数文本?

我可以指定一个无符号类型的整数文字,长度如下:

const unsigned long example = 9UL;

对于无符号字符我如何做同样的事情?

const unsigned char example = 9U?;

为了避免编译器发出警告,需要这样做:

unsigned char example2 = 0;
...
min(9U?, example2);

我希望避免目前冗长的工作方法,不要在调用 min 的行中出现“ unsignedchar”,而不在另一行中的变量中声明9:

min(static_cast<unsigned char>(9), example2);
51152 次浏览

简单的 const unsigned char example = 0;就可以了。

我认为 '\0'应该是一个字符文字,值为0,但我也看不出这有什么意义。

无符号字符类型没有后缀。整数常数是 intlong(signedunsigned)和 C99long long。只要该值在无符号字符的有效范围内,就可以使用普通的‘ U’后缀而不必担心。

C 语言没有提供指定宽度小于 int类型的整数常量的标准方法。

但是,stdint.h确实提供了 UINT8_C()宏来完成一些工作,这些工作几乎与您在 C 语言中寻找的工作一样接近。

但是大多数人只是使用没有后缀(得到一个 int常量)或者 U后缀(得到一个 unsigned int常量)。它们可以很好地处理字符大小的值,无论如何,这几乎就是您从 stdint.h宏中得到的全部内容。

假设您正在使用 std::min,那么您实际上应该做的是显式地指定 min应该使用什么类型

unsigned char example2 = 0;
min<unsigned char>(9, example2);

可以对常量进行强制转换,例如:

min(static_cast<unsigned char>(9), example2);

还可以使用构造函数语法:

typedef unsigned char uchar;
min(uchar(9), example2);

并非所有编译器都需要 typedef。

如果您正在使用 Visual C + + ,并且不需要编译器之间的互操作性,那么可以在数字上使用 Ui8后缀,使其成为无符号8位常量。

min(9ui8, example2);

但是,您不能使用像“9”这样的实际字符常量来实现此操作。

问题是如何“在 C + + 中指定一个无符号字符类型的整数‘文本’?”.而不是如何声明标识符。

在撇号中使用转义反斜杠和八进制数字(例如“177”)

八进制值总是被认为是无符号的。

C + + 11引入了用户定义的文字,可以这样使用:

inline constexpr unsigned char operator "" _uchar( unsigned long long arg ) noexcept
{
return static_cast< unsigned char >( arg );
}


unsigned char answer()
{
return 42;
}


int main()
{
std::cout << std::min( 42, answer() );        // Compile time error!
std::cout << std::min( 42_uchar, answer() );  // OK
}