До сих пор я считал, что унарный оператор +
бесполезен.
Но потом я наткнулся на следующий пример:
char ch;
short sh;
int i;
printf("%d %d %d",sizeof(ch),sizeof(sh),sizeof(i)); // output: 1 2 4
printf("%d %d %d",sizeof(+ch),sizeof(+sh),sizeof(i)); // output: 4 4 4
Означает ли это, что +
выполняет здесь преобразование типов?
Потому что он ведет себя так же, как показано ниже
printf("%d %d %d",sizeof((int)ch),sizeof((int)sh),sizeof(i)); // output: 4 4 4
Это заставляет меня думать, что +
выполняет преобразование типов.
Но потом попробую на double
double f;
printf("%d %d",sizeof(+f),sizeof((int)f),sizeof(f)); // output: 8 4 8
Это заставляет меня переосмыслить унарный оператор +
.
Итак, мой второй вопрос: имеет ли унарный оператор +
особый эффект в операторе sizeof
?
double
? На ваш первый вопрос: да,+
выполняет преобразование (целочисленные акции IIRC, поэтомуfloat
не получаетdouble
, но целые числа получают (без знака)int
или что-то с более высоким рангом). - person mafso   schedule 17.07.2014