Я всегда читал, что временным объектам разрешено связываться только с неконстантными ссылочными аргументами в случае вызовов функций.
ДЕЛО 1:-
Например:-
class Simple{
public:
int i;
Simple(Simple &f)
{
i = f.i + 1;
}
Simple(int j)
{
i = j;
}
};
int main()
{
Simple f1 = Simple(2); // error no matching call fruit::fruit(fruit)...
return 0;
}
Это приведет к ошибке, поскольку я пытаюсь временно связать с неконстантными ссылочными аргументами.
СЛУЧАЙ 2: -
try
{
throw e;
}
catch ( exception& e )
{
}
Я узнал, что, когда мы генерируем исключение, то, что действительно передается для catch, является копией исходного исключения, то есть создается временное значение для брошенного объекта, а затем оно будет передано в предложение catch.
Уловка перехватывает это исключение по неконстантной ссылке. Это контрастирует с тем, что я показал в СЛУЧАЕ 1.
Итак, мои вопросы: -
1) Существуют ли конкретные сценарии, в которых разрешена временная привязка к неконстантной ссылке.
2) Если есть, то какие факторы учитываются при разрешении этих исключений.