накладные расходы на копирование двух дублей могут быть заметны, но часто меньше
чем навязывают пара указателей
из C ++ прог. яз.
кто-нибудь может это объяснить?
Это взято из главы 11 «языка программирования C ++» Страуструпа.
Давайте посмотрим на цитату в контексте:
Мы определили
complex
операторы принимать аргументы типаcomplex
, Это подразумевает, что для каждого использованияcomplex
оператор, каждый операнд копируется. Накладные расходы на копирование двухdoubles
может быть заметно, но часто меньше, чем навязывает пара указателей (доступ через указатель может быть относительно дорогим). К сожалению, не все классы имеют удобно небольшое представление. Чтобы избежать чрезмерного копирования, можно объявить функции, принимающие ссылочные аргументы. Например:
class Matrix {
double m[4][4];
public:
Matrix();
friend Matrix operator+(const Matrix&, const Matrix&);
friend Matrix operator*(const Matrix&, const Matrix&);
};
Все, что он говорит, это то, что, так как complex
мал, допустимо передавать его по значению, а не по const
ссылка. Это, однако, не будет приемлемо для более крупных типов, таких как Matrix
выше. Для такого типа, проходя мимо const
ссылка является предпочтительным методом, так как это позволит избежать копирования всей матрицы.
Других решений пока нет …