В языке С давно не хватает символов для определений операторов. Все они должны быть из набора ASCII символов, так как в противном случает будет утеряна обратная совместимость с кодом ранее сделанных программ.
Поэтому символы начинаю дублировать, добавлять синтаксически префиксы, суффиксы и т.д. И получается красота...
В языке С каждый символ меняет результат программы, вот небольшой пример:
int i1 = 2;
int i2 = 1;
qDebug() << " i1 " << i1 << " i2 " << i2 << " i1 & i2 " << (i1 & i2) << " i1 && i2 " << (i1 && i2) ;
Вывод:
i1 2 i2 1 i1 & i2 0 i1 && i2 true
То есть & это побитовая операция
&& - это чисто логическое выражение, результатом которого будет true если значение больше 0 и false если значение равно 0.
Также & используется для обозначения ссылки.
T&& используется в шаблонах для обозначения RValue ссылки.
А что будет дальше?..