c++ - How is this boolean expression evaluated? -
in c++, allow next build :
template<typename valuetype> valuetype * func(foo * foo) { bar bar; homecoming foo && typeid(foo) == typeid(valuetype) ? &static_cast<valuetype*>bar : 0; } how homecoming statement evaluated? so?
if ((bar && typeid(bar)) == typeid(valuetype)) homecoming &static_cast<valuetype*>bar homecoming false; foo && typeid(foo) == typeid(valuetype) ? &static_cast<valuetype*>bar : 0;
...corrected parenthesis after static_cast<>, evaluated as...
(foo && (typeid(foo) == typeid(valuetype))) ? (&(static_cast<valuetype*>(bar))) : 0; the precedence rules listed here. notice ?: ternary operator @ precedence level 15 in list - lower other operators you've used, defines outer construction of evaluation. && @ 13 - way below == @ 9. (i don't think these numbers used anywhere in standard, they're convenient references pointing out things in cppreference table).
c++
No comments:
Post a Comment