Пусть Point
быть класс, экземпляры которого могут быть явно отлиты в wxPoint
:Безопасно ли возвращать литую ссылку?
class Point{
private:
int x;
int y;
public:
explicit operator wxPoint() const
{
return wxPoint(x, y);
}
// More stuff
}
У меня есть функция, которая возвращает ссылку на объект типа Point
. Заголовок такой функции:
const Point& GetPoint();
Мой вопрос: безопасно определить следующую Foo
функцию?
const wxPoint& Foo() const{
return (wxPoint&) GetPoint();
}
Сначала я реализовал Foo
с return (wxPoint) GetPoint();
, но создал новый (локальный) объекта и, следовательно, полезное предупреждение. Показанный здесь код компилируется без предупреждений.
Вся информация, которую я нашел в этом типе кастинга, относится к унаследованным классам, чего здесь нет.
Объяснение того, что именно происходит при выборе ссылки таким образом, было бы действительно оценено.
Это совершенно «безопасно» для определения этой функции. Существуют способы использования этой функции, которые могут вызвать проблемы, и есть способы, которыми бы это не было. –
В любом случае, если вы хотите написать недостижимый код ... (Вызов любой функции-члена на возвращаемом объекте будет вызывать UB). – rustyx
@PeteBecker Почему вы сказали, что это совершенно «безопасно» ?. По моей идее это совершенно небезопасно. – MRB