2014-11-13 8 views
1
bool CWaypoint::less(CWaypoint const &wp_right) 
{ 
    bool result; 
    CWaypoint temp1; 

    (calculateDistance(temp1) > temp1.calculateDistance(wp_right)) ? 
      result = 1 : result = 0; 

    return result; 
} 

Почему бы мне не получить сообщение об ошибке, даже если я не возвращаю тип bool?Функция возврата bool работает, даже если она возвращает 1 или 0

+0

Некоторые компиляторы могут дать вам предупреждение об этом (или иметь возможность сделать это), но они не могут дать вам ошибку, потому что это совершенно правильное неявное преобразование. (И это полезно во многих случаях.) – abarnert

+0

В качестве побочного примечания, почему вы используете тройное выражение для побочных эффектов и игнорируете его значение? Является ли ваш 'f' ключ сломанным, поэтому вы не можете ввести' if'? – abarnert

+2

Вы * * возвращаете 'bool' (возвращаемый тип вашей функции -' bool', а 'result' -' bool'). Вы устанавливаете 'результат' из' int' литералов. –

ответ

6

Выполняется целочисленное преобразование в булево. Из C++ стандарт:

4.12 булевых преобразований [conv.bool]

prvalue арифметики, незаданной перечисления, указатель, или указатель на типа элемента могут быть преобразованы в prvalue типа bool. Нулевое значение, значение нулевого указателя или значение указателя нулевого элемента преобразуется в false; любое другое значение преобразуется в true.

+0

Ответ полностью правильный. Это странность C++, с которой вам приходится учиться: неявное целочисленное преобразование. – user3344003

+0

@ user3344003 Я думал, что это распространено для многих языков, хотя, возможно, я ошибаюсь. –

+0

Он распространен на языках C. Вы не можете использовать целое число как логическое, например, в Ada или Pascal без явного преобразования. – user3344003

Смежные вопросы