Обработка значения Bool с помощью оператора If - PullRequest
2 голосов
/ 13 января 2012

Я студент-программист, в настоящее время разрабатывающий графический интерфейс для своей компании с Qt, и у меня есть довольно простой вопрос, на который я просто не могу найти ответ в Интернете. Кажется, что кто-то должен был спросить об этом раньше, так что если вы знаете, где ответ, я был бы счастлив со ссылкой. Мой вопрос Можно ли обрабатывать логический тип данных в C ++ с помощью оператора if. Таким образом, значение bool равно единице или нулю, так что вы можете сделать что-то вроде этого

bool trueOrFalse()
{
    myclass temp;
    QString tempstr;
    double candidate;
    bool validate;

    tempstr = ui->tableWidgetInjectionLocations->item(i,9)->text();
    candidate = tempstr.toDouble(&validate);
                if(validate == true)
                {
                    temp.tempProperty = candidate;
                }
                else
                {
                    QMessageBox error;
                    error.setText("Error");
                    error.exec();
                }
    if (validate == true)
       {
       return true;
       }
    else
       {
       return false;
       }
}

То, что я действительно ищу здесь, находится в последнем разделе этой функции bool. Когда я использую return, я действительно возвращаю значение, которое затем будет содержать эта функция, или я использую ключевое слово return неправильно? После того, как проверка прошла, Id хотел бы иметь возможность использовать функцию, чтобы указать, следует ли перейти к другой функции. Пожалуйста, оставьте мою критику конструктивной, пожалуйста. Будучи студентом, я заинтересован только в улучшении.

Ответы [ 2 ]

13 голосов
/ 13 января 2012

Значение, возвращаемое с помощью оператора return, возвращается буквально при каждом вызове функции.

Так что, если вы пишете этот код где-то еще в вашей программе:

bool returnValue = trueOrFalse();

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

Сама функция не «удерживает» значение, вызывающая функция определяет переменную, которая будет содержать значение после завершения вызова функции.


Что касается вашего второго вопроса, вы правильно используете оператор return, но вы можете существенно упростить свой код в функции trueOrFalse(). Вместо этого:

   if (validate == true)
   {
       return true;
   }
   else
   {
       return false;
   }

Все, что вам нужно, это:

return validate;

Поскольку локальная переменная validate уже является bool!

Это устраняет избыточность проверки логического значения по отношению к логической константе (true), что предотвращает появление странных ошибок и облегчает чтение и понимание кода.

Фактически, вы можете использовать этот общий шаблон в любое время, когда работаете с логическими значениями (bool). Вместо того, чтобы сравнивать их с литералом false или true, вы можете просто написать:

if (validate)  // test for truth
{
    // do whatever...
}

или

if (!validate)  // test for falsity
{
    // do whatever...
}
7 голосов
/ 13 января 2012

Замените

 if (validate == true)
       {
       return true;
       }
    else
       {
       return false;
       }

на

return validate;

Нет смысла проверять его и возвращать другое логическое значение.

Пока вы на нем, заменитепредыдущий

if (validate == true)

с

if (validate)
...