在C ++中,让以下构造:
template<typename ValueType>
ValueType * func(Foo * foo)
{
Bar bar;
return foo && typeid(foo) == typeid(ValueType) ? &static_cast<ValueType*>bar : 0;
}
如何评估退货声明?像这样?
if ((bar && typeid(bar)) == typeid(ValueType))
return &static_cast<ValueType*>bar
return false;
答案 0 :(得分:5)
foo && typeid(foo) == typeid(ValueType) ? &static_cast<ValueType*>bar : 0;
...在static_cast<>
之后用括号更正,被评估为......
(foo && (typeid(foo) == typeid(ValueType))) ? (&(static_cast<ValueType*>(bar))) : 0;
列出了优先规则here。请注意,?:
三元运算符在此列表中的优先级别为15 - 低于您使用的其他运算符,因此它定义了评估的外部结构。 &&
位于==
9点以下13点。(我不认为这些数字会在标准中的任何位置使用,但它们是方便的参考,用于指出cppreference table)。