!!x
является сокращением для Boolean(x)
Первый удар заставляет js-двигатель запускать Boolean(x)
, но также имеет побочный эффект инвертирования значения. Таким образом, второй удар отменяет побочный эффект.
Если вы действительно хотите избежать оператора ->
, вы можете написать его так:
cout << (*((*root).left)).key;
... но писать это больно и читать больно, поэтому это хороший пример почему полезен оператор ->
:)