我可以指定unsigned long类型的整数文字,如下所示:
const unsigned long example = 9UL;
我如何为无符号字符做同样的事?
const unsigned char example = 9U?;
这是为了避免编译器警告:
unsigned char example2 = 0;
...
min(9U?, example2);
我希望避免我目前所拥有的冗长的解决方法,并且没有'unsigned char'出现在调用min的行中而不在另一行的变量中声明9:
min(static_cast<unsigned char>(9), example2);
答案 0 :(得分:35)
C++11 introduced user defined literals. It can be used like this:
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
}
答案 1 :(得分:27)
C没有提供标准方法来指定宽度小于int
类型的整数常量。
然而,stdint.h
确实提供UINT8_C()
宏来做一些与你正在寻找的内容非常接近的内容。
但是大多数人只是使用无后缀(获得int
常量)或U
后缀(获得unsigned int
常量)。它们可以很好地处理字符大小的值,而且无论如何,这几乎都可以从stdint.h
宏中获得。
答案 2 :(得分:19)
你可以施放常数。例如:
min(static_cast<unsigned char>(9), example2);
您还可以使用构造函数语法:
typedef unsigned char uchar;
min(uchar(9), example2);
所有编译器都不需要typedef。
答案 3 :(得分:11)
如果您使用的是Visual C ++并且不需要编译器之间的互操作性,则可以在数字上使用 ui8 后缀,使其成为无符号的8位常量。
min(9ui8, example2);
你不能用像'9'那样的实际字符常量来做到这一点。
答案 4 :(得分:7)
假设您正在使用std::min
,您实际应该做的是明确指定min
应该使用的类型
unsigned char example2 = 0;
min<unsigned char>(9, example2);
答案 5 :(得分:4)
只需const unsigned char example = 0;
即可。
答案 6 :(得分:0)
我认为'\0'
将是一个值为0的char字面值,但我也没有看到这一点。
答案 7 :(得分:0)
unsigned char类型没有后缀。整数常量可以是int
或long
(signed
或unsigned
),也可以是C99 long long
。只要该值在无符号字符的有效范围内,您就可以毫无顾虑地使用普通的“U”后缀。
答案 8 :(得分:0)
问题是如何“在C ++中指定一个unsigned char类型的整数'文字'?”。不是如何声明标识符。
您在撇号中使用转义反斜杠和八进制数字。 (例如,'\ 177')
八进制值总是被认为是无符号的。