看下面的表达式:
Target * p = dynamic_cast<Target*>(pFarAncestor);
Run Code Online (Sandbox Code Playgroud)
是否存在动态转换类型可能与左值(本例中为p)类型不同的情况?换句话说,有一个原因,一直是显式目标变量的类型?
我想知道为什么编译器不接受如下的签约形式:
Target * p = dynamic_cast<>(pFarAncestor);
Run Code Online (Sandbox Code Playgroud)
甚至
Target * p = dynamic_cast(pFarAncestor); // ok this seems a function call indeed
Run Code Online (Sandbox Code Playgroud)
由于auto这个原因,主要引入了关键字:
auto p = dynamic_cast<Target*>(pFarAncestor);
Run Code Online (Sandbox Code Playgroud)
如果你真的想避免重复表达式右侧的类型,你可以使用decltype,虽然它有点冗长:
Target * p = dynamic_cast<decltype(p)>(pFarAncestor);
Run Code Online (Sandbox Code Playgroud)
但你显然必须在某个地方至少写一次这种类型.