вариант с ошибкой :
class foo
{
public:
int a;
foo()
:a(1)
{
}
};
void bar(foo & b)
{
}
int main()
{
bar(foo());
return 0;
}
prog.cpp: In function ‘int main()’:
prog.cpp:17: error: invalid initialization of non-const reference of type ‘foo&’ from a temporary of type ‘foo’
prog.cpp:11: error: in passing argument 1 of ‘void bar(foo&)’
|
собсно компилятор нам и говорит что такая запись не имеет смысла - если мы поменяем foo в функции то как нам вернуть результат ?
потому правильный вариант :
class foo
{
public:
int a;
foo()
:a(1)
{
}
};
void bar(const foo & b)
{
}
int main()
{
bar(foo());
return 0;
}
и он компилируется без ошибки