[expr.cast]的第4段(在撰写本文时可用的最新C++标准草案中)描述了C风格转换的行为,内容如下:
我的问题是如何将“一个转换被解释为一个通过使用显式类型转换的强制转换符号,可以执行以下转换:
const_cast
static_cast
static_cast
后跟const_cast
reinterpret_cast
reinterpret_cast
后跟const_cast
相同的语义限制和行为适用,但在以下情况下执行
static_cast
时,即使基类不可访问,转换也是有效的:
- 派生类类型的对象的指针或派生类类型的左值或右值可以明确转换为分别指向无歧义基类类型的指针或引用;
- 派生类类型的成员指针可以明确转换为无歧义非虚基类类型的成员指针;
- 无歧义非虚基类类型的对象指针、无歧义非虚基类类型的 glvalue 或无歧义非虚基类类型的成员指针可以明确转换为派生类类型的指针、引用或成员指针。
如果一个转换可以被解释为上述多种方式中的一种以上,则使用列表中首先出现的解释,即使由该解释产生的强制转换是非法的。 如果一个转换可以被解释为
static_cast
后跟const_cast
的多种方式,则该转换是非法的。[...]
static_cast
和const_cast
的组合”?谢谢。
int const **
,另一个是转换为int* const *
。C 风格的强制转换为int**
。演示 - Igor Tandetnik