накладные расходы на копирование: удваивается против указателей

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

из C ++ прог. яз.

кто-нибудь может это объяснить?

0

Решение

Это взято из главы 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 ссылка является предпочтительным методом, так как это позволит избежать копирования всей матрицы.

2

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

Других решений пока нет …

По вопросам рекламы [email protected]