Возвращаемое значение C ++ без оператора возврата

Когда я запускал эту программу:

#include  int sqr(int&); int main() { int a=5; std::cout<<"Square of (5) is: "<< sqr(a) <<std::endl; std::cout<<"After pass, (a) is: "<< a <<std::endl; return 0; } int sqr(int &x) { x= x*x; } 

Я получил следующий результат:

 Square of (5) is: 2280716 After pass, (a) is: 25 

Что такое 2280716 ? И как я могу получить значение, возвращаемое в sqr(a) то время как в функции int sqr(int &x) нет оператора return ?

Благодарю.

    Строго говоря, это приводит к неопределенному поведению . На практике, поскольку sqr имеет тип возвращаемого значения int , он всегда будет возвращать что-то, даже если не существует оператора return . Это может быть любая стоимость int .

    Добавьте оператор return и включите предупреждения в своем компиляторе ( g++ -Wall ).

     int sqr(int &x) { return x = x*x; } 

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

    Не думайте об этом слишком много – просто добавьте заявление о return .

    Ваша функция sqr() не имеет оператора возврата. Функция имеет неопределенное поведение относительно возвращаемого значения. Ваш первый результат показывает это возвращаемое значение.

    Однако компилятор должен показать диагностику.

    попробуй это:

     int sqr(int x) { return x*x; } 

    Вы пытаетесь напечатать возвращаемое значение sqr (int & x), которое в этом случае является значением для мусора. Но не возвращая надлежащего X * X. попробуйте вернуть действительный X * X из sqe

    int sqr(int &x) { x= x*x; return x;}

    Если функция не объявлена void вы ДОЛЖНЫ иметь оператор возврата, указывающий, что должно быть значением при возврате вызывающему. Если вы этого не сделаете и просто закончите функцию без возврата значения, результатом вызова этой функции является «Undefined Behavior», что означает, что ваша программа может что-либо сделать (включая сбой или удаление всего, что находится на вашем жестком диске).

    Обычно, если это просто простой int, вы получите фанковые номера, но в более сложных случаях это может стать источником больших неприятностей. Просто не делай этого.

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

    Вам нужно сделать выбор между:

    1) Передача по ссылке / значению AND возвращает INT.

    2) Передача по ссылке AND return void.

    Этот выбор зависит от цели вашей функции.

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

    Итак, либо:

     int sqr(int& x) { return x*x; } 

    ИЛИ

     void sqr(int& x) { x= x*x; } 
    Давайте будем гением компьютера.