以下在Visual Studio中编译但无法在g ++下编译.
int main()
{
int a = unsigned char('0');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
unsigned char()是一种在C++中强制转换的有效方法吗?
GMa*_*ckG 11
不,这不合法.
函数式显式类型转换需要一个简单类型说明符,后跟一个带括号的表达式列表.(§5.2.3)unsigned char是不一个简单型说明符 ; 这与詹姆斯提出的问题有关.
显然,如果unsigned char是一个简单类型说明符,那将是合法的.解决方法是使用std::identity:
template <typename T>
struct identity
{
typedef T type;
};
Run Code Online (Sandbox Code Playgroud)
然后:
int a = std::identity<unsigned char>::type('0');
Run Code Online (Sandbox Code Playgroud)
std::identity<unsigned char>::type是一个简单类型说明符,它的类型只是模板参数的类型.
当然,你得到一个二合一static_cast.无论如何,这是首选的铸造方法.
在C++中首选的方法是使用static_cast如下:
int a = static_cast<unsigned char>( '0' );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2709 次 |
| 最近记录: |