Wil*_*mKF 46 c++ integer constants language-lawyer
我可以指定unsigned long类型的整数文字,如下所示:
const unsigned long example = 9UL;
Run Code Online (Sandbox Code Playgroud)
我如何为无符号字符做同样的事情?
const unsigned char example = 9U?;
Run Code Online (Sandbox Code Playgroud)
这是为了避免编译器警告:
unsigned char example2 = 0;
...
min(9U?, example2);
Run Code Online (Sandbox Code Playgroud)
我希望避免我目前所拥有的冗长的解决方法,并且没有'unsigned char'出现在调用min的行中而不在单独的行中声明变量中的9:
min(static_cast<unsigned char>(9), example2);
Run Code Online (Sandbox Code Playgroud)
小智 41
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
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*urr 28
C没有提供标准方法来指定宽度小于类型的整数常量int.
然而,stdint.h确实提供UINT8_C()宏来做一些非常接近你正在寻找的东西,因为你将进入C.
但大多数人只是使用无后缀(获得int常量)或U后缀(获得unsigned int常量).它们可以很好地处理字符大小的值,而且stdint.h无论如何,这几乎都可以从宏中获得.
jan*_*anm 20
你可以施放常数.例如:
min(static_cast<unsigned char>(9), example2);
Run Code Online (Sandbox Code Playgroud)
您还可以使用构造函数语法:
typedef unsigned char uchar;
min(uchar(9), example2);
Run Code Online (Sandbox Code Playgroud)
所有编译器都不需要typedef.
Mr *_*ter 11
如果您使用的是Visual C++并且不需要编译器之间的互操作性,则可以在数字上使用ui8后缀,使其成为无符号的8位常量.
min(9ui8, example2);
Run Code Online (Sandbox Code Playgroud)
你不能用像'9'这样的实际char常量来做到这一点.
假设您正在使用std::min实际应该执行的操作,请明确指定min应使用的类型
unsigned char example2 = 0;
min<unsigned char>(9, example2);
Run Code Online (Sandbox Code Playgroud)