Параметры функции: Копия или указатель?

Вы можете сделать это с помощью CSS довольно легко, используя правильно структурированный HTML:

HTML:

treybake Frontend Developer

TreyBake

Frontend Developer

e: someemail@domain.com
t: 0112233445566
w: domain.com

CSS:

#bio-intro {
  background: lightgray;
  width: 100%
}

#img-container, #bio-info, #bio-contact {
  display: inline-block;
  width: 33%
}

#img-container {
  border: 1px solid;
  border-radius: 100%;
  max-width: 150px
}

Мы по существу разбиваем каждый столбец в свой собственный контейнер. Мы устанавливаем эти контейнеры на 1/3 родительской ширины и устанавливаем отображение на inline-flex, чтобы создать строку. Все остальное - простой CSS для создания изображения с рамкой (без изображения, следовательно, вы видите значение атрибута ALT на изображении - замените его на изображение, и вы увидите намного лучший результат).

Рабочий пример

9
задан 4 November 2008 в 11:23
поделиться

6 ответов

Избегайте использования указателя. Используйте постоянную Ссылку, если находится В параметре еще просто ссылка для В параметре

4
ответ дан 4 December 2019 в 06:57
поделиться

Указатель открывается для ошибок, так как он позволяет вызываемому изменять объект. Указатели могут быть 0, который имеет тенденцию создавать катастрофические отказы, и это создает потребность протестировать на 0 указателей повсеместно, это может быть раздражающим. Используя ссылки C++, const- объявленный, если это возможно, обходит обе этих проблемы.

4
ответ дан 4 December 2019 в 06:57
поделиться

ссылка более распространена, или ссылка константы, если они не собираются изменяться.

1
ответ дан 4 December 2019 в 06:57
поделиться

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

Если Ваша функция изменит структуру, то передача указателя позволит вызывающей стороне видеть измененные данные в структуре. В этом случае передача копии, вероятно, будет неправильной, так как Ваша функция изменит копию, которая затем (по-видимому), отбрасывается. Конечно, возможно, что Ваша функция изменяет данные, но Вы не хотите модификации, в этом случае копия является правильным поступком, для защиты исходных значений от изменений.

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

Если Вы не довольны понятием передающих указателей на структуры, необходимо получить некоторую практику, потому что это - типичный способ иметь дело со структурами в C и C++.

Насколько производительность идет, это - больше работы для копирования структуры, но это довольно незначительно в схеме вещей. Сконцентрируйте свои мысли на семантике кода сначала.

2
ответ дан 4 December 2019 в 06:57
поделиться

Существует несколько путей, которыми передача копии может быть более дешевой, чем передача указателя.

  1. Объект равен или меньше, чем указатель. Непосредственно доступ к значению всегда будет быстрее, чем разыменование указателя.
  2. Структура является достаточно маленькой, чтобы быть помещенной на стек компилятором. В этом случае доступ к значениям в структуре сделан режимами индексной адресации, а не косвенными режимами индексной адресации. Первый обычно быстрее.

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

Теперь для части ответа Вы, вероятно, не хотите слышать: Это обычно не имеет так большого значения! Используйте метод передачи параметров, который имеет большую часть смысла для семантики Вашей программы. Если Вы находите позже, что существует узкое место производительности в конкретной области, затем фокусируются в на улучшении производительности там. Не переделывайте оптимизируют!

12
ответ дан 4 December 2019 в 06:57
поделиться

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

Обычно семантика значения может быть выражена или путем передачи значения значением или ссылкой константы

void value_semantics(my_obj obj);
void value_semantics(const my_obj& obj);

Однако ссылка константы, путь имеет некоторые недостатки также, он предотвращает несколько оптимизации, что компилятор может сделать из-за искажения проблем также для объектов с тривиальными конструкторами дополнительный уровень абстракции (ссылка реализована как указатель), может перевесить преимущества предотвращения копии.

Для получения ссылочной семантики, можно выбрать или передачу ссылкой или указателем, поскольку другие уже сказали, что ссылки являются более естественными, чем указатели в C++ (Вы не должны использовать адрес оператора &) и единственное реальное преимущество указателей состоит в том, если Вы хотите включить Нулевые значения.

Эмпирическое правило - то, что для нетривиальных классов необходимо передать ссылкой константы, иначе значением.

10
ответ дан 4 December 2019 в 06:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: