在C++中,让以下构造:
template<typename ValueType>
ValueType * func(Foo * foo)
{
Bar bar;
return foo && typeid(foo) == typeid(ValueType) ? &static_cast<ValueType*>bar : 0;
}
Run Code Online (Sandbox Code Playgroud)
如何评估退货声明?像这样?
if ((bar && typeid(bar)) == typeid(ValueType))
return &static_cast<ValueType*>bar
return false;
Run Code Online (Sandbox Code Playgroud)
foo && typeid(foo) == typeid(ValueType) ? &static_cast<ValueType*>bar : 0;
Run Code Online (Sandbox Code Playgroud)
...后用括号校正static_cast<>,被评估为......
(foo && (typeid(foo) == typeid(ValueType))) ? (&(static_cast<ValueType*>(bar))) : 0;
Run Code Online (Sandbox Code Playgroud)
此处列出了优先规则.请注意,?:三元运算符在此列表中的优先级别为15 - 低于您使用的其他运算符,因此它定义了评估的外部结构. &&在13 -下面的方法==在9.(我不认为这些数字是在标准的任何地方使用,但他们在cppreference表指出东西方便引用).
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |