Операторы && и || вычисляют второй операнд, если только в этом есть необходимость. У Страуструпа (интересная фамилия, неправда ли) об этом написано. Это позволяет сократить код. Допустим есть код:
struct Car
{ float speed;}
Car* pCar = 0;
Тогда вместо:
if (pCar)
{
if (pCar->speed > 0.0)
{
/*...*/
}
}
можно написать:
if (pCar && pCar->speed > 0.0)
{/*...*/}
Ниже прикреплен пример.