Какие преобразования происходят здесь? - PullRequest
1 голос
/ 23 марта 2012

Какие преобразования имеют место при оценке следующих выражений?

char cval;
int ival;
float fval; 
// Assume all 3 have been set to correct values...
a) if(fval)
b) double dval = fval + ival; 
c) dval + ival + cval;

Мои мысли:

a) Я предполагаю, что if нужно значение bool, поэтому floatполучает неявное приведение к bool.

b) Я предполагаю, что fval повышается до double и ival преобразуется в double, а затем они добавляются.1017 * в) Сначала ival преобразуется в double.Затем оценивается dval + ival типа double.Тогда cval ... Я не знаю, преобразуется ли он в double напрямую или вначале повышается до int.В любом случае, после этого шага к этому значению добавляется временное значение dval + ival double.

Правильно ли мое понимание?

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

а) fval контекстно преобразуется в bool.


В случаях b и c применяются " обычные арифметические преобразования ", что означает:

b) ival преобразуется в float и (с использованием специального правила, вместо " обычных арифметических преобразований ") fval + ival преобразуется в double.

в) ival конвертируется в double, cval конвертируется в double.

2 голосов
/ 23 марта 2012

Помните, что дьявол кроется в деталях с такими вопросами, всегда возможно, что вы что-то упустили.

A) На самом деле я нашел ответ на stackoverflow ( Является ли if (double) допустимым C ++? ): все в if преобразуется непосредственно в логическое значение.

B)Сначала iVal конвертируется в float, затем добавляется в fVal, а затем конвертируется в double.Выражение полностью оценивается / печатается перед присваиванием.

C) Порядок слева направо будет применен к операторам +.Таким образом, iVal конвертируется в удвоение, затем добавляется в dVal, и затем то же самое происходит с cVal, так что напрямую удваивается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...