Nej, "i = 3 || 5" skulle tilldela 3 till i, och hela uttrycket skulle sedan bli sant. Hela poängen var att oavsett vad som står till vänster om || så kommer hela uttrycket alltid att vara sant, eftersom 5 är sant.
==-operatorn och string::compare har inte samma beteende. == returnerar bara sant eller falskt beroende på om strängarna är lika eller inte. string::compare returnerar 0 om strängarna är lika, annars ett positivt eller negativt heltal som talar om vilken av strängarna som är "störst", se t.ex. här för mer information.
Notera också att du inte använder || och && på andra datatyper än bool (om man inte överlagrat dem för någon typ dvs.). || och && opererar endast på booleska uttryck, dvs. uttryck som är antingen sanna eller falska. Den enda anledningen till att du kan använda dem på int är att C++ automatiskt typkonverterar int till bool.