15

今まで、単項+演算子は使えないと思っていました。

しかし、その後、次の例に出くわしました:

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

これにより、単項演算子について再考する必要があり+ます。

だから私の2番目の質問は: 単項+演算子は演算子に特別な効果がありsizeofますか?

4

4 に答える 4

4

単項演算子は、 +「初期」の通常の算術変換をトリガーするため、すべての整数オペランドは、ランクよりもランクが低く、int昇格unsigned intされますint(またはunsigned int、型がその実装で昇格される型のすべてのint値をカバーしていない場合)。

于 2014-07-17T14:05:30.117 に答える