Я и мой друг пытались выполнить две программы: сначала, где int &, а второй, где передается int &.Проверяет ли тип проверки на возврат и когда он передан как аргумент
Программа 1:
#include<iostream>
using namespace std;
int& fun(int x)
{
static int y=x;
cout<<"Inside Fun()"<<y<<endl;
return y;
}
int main()
{
cout<<(fun(10)=30)<<endl;
cout<<fun(40)<<endl;
return 0;
}
работает как шарм ..
В то время как программа 2
#include<iostream>
using namespace std;
int& fun(int &x)
{
static int y=x;
cout<<"Inside Fun()"<<y<<endl;
return y;
}
int main()
{
cout<<(fun(10)=30)<<endl;
cout<<fun(40)<<endl;
return 0;
}
дает ошибку
return.cc: In function 'int main()':
return.cc:11: error: invalid initialization of non-const reference of type 'int&' from a temporary of type 'int'
return.cc:3: error: in passing argument 1 of 'int& fun(int&)'
return.cc:12: error: invalid initialization of non-const reference of type 'int&' from a temporary of type 'int'
return.cc:3: error: in passing argument 1 of 'int& fun(int&)'
В первой программе, весело :: & x = 30 разрешено взамен. В то время как в Программе 2 int & x = 10 не допускается. Мое сомнение заключается в том, выполняется ли более строгая проверка типов в C++ для параметров функции по сравнению с типами возврата и почему & x = 10 недействителен в качестве параметра функции.
Код, который вы опубликовали, отличается от кода, который вы описали, который отличается от кода, создавшего эти ошибки. – erip
Извините .. мой плохой. исправит его – CVS
@AlexeyAndronov ничего себе. это похоже работа ..Но было бы неплохо, если бы вы могли объяснить мне разницу в обоих случаях и почему const был необходим как параметр, и то же самое не нужно для возвращаемого типа? – CVS