Złożoność obliczeniową i pamięciową?
To pierwsze, jeśli zależy Ci na szybkości, to drugie - jeśli piszesz na platformy z mocno ograniczonymi zasobami. Najlepiej pamiętać o obu kwestiach.
Wskaźniki i referencje?
Na jedno wychodzi, więc to rozróżnienie niewiele zmienia. W C++ powinieneś ograniczać użycie gołych wskaźników na rzecz referencji, ale nie ze względu na wydajność co potencjalne błędy.
Lepiej zrobić kilka else ifów z małą ilością warunków czy jeden ogromny if w którym jest wiele warunków?
Poczytaj o short-circuit evaluation. Czasem jeden wielki warunek jest wydajniejszy niż kilka ifów. Aczkolwiek nie popadałbym w skrajności. Po prostu przy układaniu dłuższych warunków układaj je tak, by zminimalizować ilość porównań.
Czy kompilator za mnie wybierze lepszą opcje? W każdym przypadku?
Jak będziesz pisał nieoptymalny kod, to kompilator nic nie poradzi.