Показать сообщение отдельно
Старый 06.01.2013, 15:27   #2
jimon
 
Сообщений: n/a
Ответ: Вызов конструктора в списке аргументов функции

вариант с ошибкой :

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;
}
и он компилируется без ошибки
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
St_AnGer (07.01.2013), wolfhound512 (06.01.2013)