Вот мой тестовый код, я не даю функции возвращаемое значение, но почему этот код может пройти через компилятор? И мне интересно, не выдаю ли явный тип возвращаемого значения одной функции, как показано ниже, что будет генерировать компилятор?
Вот тестовый код, спасибо.
#include <iostream>
#include <vector>
using std::vector;
vector<vector<int> > testReturn(){
int test = 5;
}
int main(){
testReturn();
return 0;
}
Вы не всегда можете доверять компилятору, поскольку разные компиляторы имеют разные условия проверки при компиляции. Если вы не вернетесь в функцию, которая должна быть возвращена, даже скомпилирована успешно, результат не определен. Вот почему ваша программа вылетает из строя. Вы всегда должны стараться избегать этого.
something = testReturn();
использовать возвращаемое значение (то есть, в вызывающей программе, например, something = testReturn();
).
Это неправильный код, создающий неопределенное поведение.
Такой код (функция с битом типа возвращаемого значения без фактического оператора return) компилируется в некоторых вариантах с некоторыми компиляторами. Это, однако, ничего не значит, но в компиляторе есть ошибка, которая должна давать предупреждение/ошибку.
Я не даю функции возвращаемое значение, но почему этот код может проходить через компилятор?
Предоставление return
значения является необязательным в C. Это правило "перенесено" на C++, а также добавляет длинный список неопределенных действий (например, ситуации, когда недопустимые программы разрешены для компиляции). К кредиту C++ компиляторы предупреждают вас о подобных ситуациях в довольно недвусмысленных выражениях.
И мне интересно, если я не даю явный тип возвращаемого значения для одной функции, как показано ниже, что компилятор будет генерировать код?
Компилятор не будет генерировать код для обработки возвращаемого значения. Независимо от того, какое произвольное состояние регистров ЦП и память в закрывающей скобке, то состояние, которое будет "возвращено". Попытка интерпретировать произвольные значения в качестве возвращаемого значения - это то, что приведет к сбою.
main
, вероятно, приведет к неприятным последствиям.
Код не компилируется, так как возвращаемый тип testRunner
является вектором вектора ints.
Так верни его!