как работает функция, возвращающая значение

0

Например, функция:

int pr()
{
   std::cout<<"test"<<std::endl;
   return 0; 
}

Эта функция имеет тип возврата int. Почему мы можем написать эту функцию в Main, не присваивая ничего. например

int main()
{
    int i = pr();  // all right.
    pr();   // but why is this correct also?
    // is this similar void function this moment?
}
  • 3
    Потому что вы игнорируете возвращаемое значение?
  • 0
    Почему вы ожидаете, что это будет неправильно?
Показать ещё 1 комментарий
Теги:

3 ответа

1

Потому что стандарт говорит так. На многих языках ошибка при использовании возвращаемого значения будет ошибкой. По разным историческим причинам это не относится к C или C++; вы можете игнорировать возвращаемое значение.

На уровне реализации: int обычно возвращается в регистр; если вы игнорируете возвращаемое значение, компилятор ничего не делает с этим регистром. Однако для типов классов вызывающий должен уничтожить возвращаемое значение, даже если он игнорирует его.

1

Он просто выполняет функцию, и возвращаемое значение теряется, оно не назначается нигде, игнорируется.

Это разрешено, потому что это не запрещено. Там может быть ситуация, когда вы заботитесь только о логике, и вы действительно не хотите использовать возвращаемое значение, которое указывает на то, что не важно для вашей текущей задачи. Например:

int openFiles(string directory) {
    //opens files on directory and returns the number
    //of files that were successfully opened
}

Меня может не интересовать возвращаемый тип.

  • 0
    это похоже на пустую функцию в этот момент?
  • 1
    @ user3505910 Нет, у него другой тип возврата, хотя вы его не используете.
0

В C/C++ функция может выбрать свой тип возврата как пустой или определенный тип. Однако, если non-void является возвращаемым типом функции, всякий раз, когда вызывается функция, вызывающий может использовать или не использовать возвращаемое значение. Это не обязательно означает, что это эквивалентно типу возврата void. У вас есть возможность проверить возвращаемое значение, но вам не нужно проверять это, до вас, необязательно. Надеюсь, что ответит.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню