Ответ 1
Да, это гарантировано для "встроенных" типов. Однако, если вы перегружаете && или || для ваших собственных типов, короткозамкнутая оценка НЕ выполняется. По этой причине перегрузка этих операторов считается плохой.
В Java я использую
if (a != null && a.fun());
используя все преимущества оценки и выражения короткого замыкания, оцениваются слева направо?
В С++ я могу сделать то же самое? Гарантируют ли они переносимость на разных платформах и компиляторах?
if (a != 0 && a->fun());
Да, это гарантировано для "встроенных" типов. Однако, если вы перегружаете && или || для ваших собственных типов, короткозамкнутая оценка НЕ выполняется. По этой причине перегрузка этих операторов считается плохой.
Да. && и || короткое замыкание на C и С++; это гарантируется стандартом.
См. также: Являются ли закодированные логические операторы короткими законами? И порядок оценки?