Можно ли попросить компилятора по возможности использовать версию функции "по ссылке"? Я sh, чтобы избежать "копирования" в максимально возможной степени
Например, у меня есть функции fooCallByValue(myObj x)
и fooCallByReference(myObj& x)
. Они имеют идентичную реализацию, но я действительно wi sh, чтобы использовать вызов по ссылке, когда это возможно, по какой-то причине. В настоящее время я должен вручную выбрать, какую функцию вызывать. Просто наличие двух функций с одинаковым именем (например, foo(myObj x)
и foo(myObj& x)
) приведет к ошибке (Использование шаблона также не помогает).
Пример problemmati c код:
class myObj {
public:
myObj(myObj& obj) {
// implementation...
}
myObj& operator = (myObj& obj) {
// implementation...
}
myObj operator + (myObj& obj) {
// implementation...
}
// other members and implementation...
someObj* pointer;
};
void foo(myObj& x) {
cout << "call by reference" << endl;
}
void foo(myObj x) {
cout << "call by value" << endl;
}
int main() {
myObj x, y;
//init x and y...
foo(x);
foo(x + y);
}
Желаемый вывод:
call by reference
call by value
Заранее спасибо.
Редактирование:
- По какой-то особой причине
operator +
собирается изменить ввод myObj& x
, чтобы он не принимал константу.
Да, желательно изменить исходный ввод, когда это возможно. В противном случае он выполнит «копирование» и изменит скопированное значение.
Больше фонов:
Этот myObj
содержит указатель. Поэтому мне нужно сделать глубокую копию в конструкторе копирования. Но я не хочу этого делать при передаче значений между функциями, когда это возможно.