оператор T & amp; () или оператор T ()?

При определении оператора преобразования, есть ли преимущество определения

operator T() const;

над

operator T&();
operator const T&() const;

Предполагая, что меня не интересует потенциальный выигрыш в производительности при возврате значения вместо ссылки.

4

Решение

Второй подход определенно лучше.

При первом подходе вызывающий код требуется сделать копию возвращенного объекта, что может быть дорого.

При втором подходе вызывающий код может сделать копию или нет.

Когда вы отвечаете за класс / библиотеку, вы не хотите отвечать за узкие места в производительности, для которых они не являются обходными путями.

Одним из основных недостатков второго подхода является то, что вызывающий код можно оставить с висящим указателем / ссылкой. Чтобы помочь своим пользователям, вам необходимо четко указать, как долго возвращаемые ссылки действительны. Надеюсь, ваши пользователи прислушаются и поступят правильно.

3

Другие решения

Я думаю, что это зависит от ситуации. Первый подход возвращает новый объект, который можно изменить без изменения исходного объекта. Второй подход возвращает ссылку на существующий объект. Если вы измените этот объект, вы также измените исходный объект.

Какой из них подходит вам, вы должны решить; нет общего преимущества.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector