Не на каждом языке есть унарный оператор +
, и в большинстве из них это не работает. Иногда, однако, он будет выполнять такие действия, как преобразование строки в число во многом так же, как "string" + 0
в некоторых языках. В Ruby есть тщательно разработанный синтаксический анализатор, который анализирует, является ли конец строки маркером конца оператора или нет, поэтому унарный символ +
может действовать, чтобы продолжить оператор на другой строке.
С перегрузкой оператора все может быть возможно.
Но вернемся к C99, унарный оператор +
делает только одно: он применяет целочисленные повышения . Так как это могло бы произойти в любом случае, если бы операнд использовался в выражении, можно представить, что унарный + находится в C просто для симметрии с унарным -.
Трудно увидеть это в действии, потому что промо-акции так широко применяются. Я придумал это:
printf("%zd\n", sizeof( (char) 'x'));
printf("%zd\n", sizeof(+(char) 'x'));
который (на моем mac) печатает
1
4