Какое значение по умолчанию возвращается булевой функцией в C ++? - PullRequest
0 голосов
/ 24 марта 2020

Каким может быть возвращаемое значение булевой функции в C ++, если я что-то не возвращаю? И что может быть возвращаемым значением, если я просто верну истинное значение, а не ложное? Вот мой код:

bool f(int a)
{
//    return value?
}

bool f(int a)
{
    if(a%2) return true;
//    return value here?
}

Ответы [ 3 ]

2 голосов
/ 24 марта 2020

Возвращаемый тип - тот, который вы определяете в прототипе функции. Обратите внимание, что по умолчанию в C ++ нет возвращаемого значения (кроме специальной функции main). Функция, которая должна возвращать значение, должна возвращать значение во всех своих путях кода. В противном случае вы получите неопределенное поведение. Cf, например, этот онлайн C ++ рабочий проект :

9.6.3 Оператор возврата

...

Выход из конца конструктора, деструктора или функции с возвращаемым типом cv void эквивалентен возвращению без операнда. В противном случае выпадение из конца функции, отличной от main (6.8.3.1), приводит к неопределенному поведению.

1 голос
/ 24 марта 2020

Поведение при вызове функции, отличной от void (кроме main), когда управление программой достигает ветви, у которой нет явного значения return: undefined .

(Обратите внимание, что это более строгое условие, чем в C, где поведение не определено, только если вы пытаетесь использовать возвращаемое значение функции.)

В C ++ вы можете использовать auto, чтобы получить компилятор для определения типа возвращаемого значения:

auto foo(int n)
{
    if (n >= 0){
        return true;
    } else {
        return false;
    }
}

, но тип foo по-прежнему stati c в том смысле, что он известен во время компиляции. Этот подход особенно полезен при работе с шаблонами. Он не предназначен для того, чтобы позволить вам быть небрежным с вашими типами.

0 голосов
/ 24 марта 2020

вы не сможете этого сделать, если вы напишите функцию, которая предполагает что-то возвращать, а вы ничего не вернете и получите ошибку. так что используйте void или верните что-нибудь.

...