C样式转换可以处理的转换,但C ++转换不能

据说 C风格的演员只是尝试应用不同的C ++演员组合,并使用第一个允许的组合。 但是,我有一种感觉,我听说有些情况只有C风格的强制转换可以处理,而C ++强制转换的组合都不允许。

我错了吗? 在任何上下文(在C ++中)中的任何 C风格的强制转换都可以用适当的C ++强制转换组合替换,这是真的吗?

UPD感谢干杯和他。 – Alf ,我们有一个C ++强制转换无法处理的例子,它们无法产生定义预期的行为。 高级问题是提供一个C ++强制转换无法处理意义甚至无法编译的示例?

转换为不可访问的基数只能表示为C样式转换(句法变体之一)。 在该上下文中,它等同于static_cast ,它可以更改地址,但static_cast无法访问基数。

例:

 struct Base { int x = 42; }; struct Oh_my : private Base { virtual ~Oh_my() {} }; #include  using namespace std; auto main() -> int { Oh_my o; cout << "C cast: " << ((Base&)o).x << endl; cout << "reinterpret_cast: " << reinterpret_cast(o).x << endl; } 

在Windows 7中使用MingW g ++输出:

 C演员阵容:42
 reinterpret_cast:4935184

但由于它是非常未定义的行为,最后的输出操作可能会崩溃。