Передача ссылкой, более дорогой, чем передача значением

Существует ли случай, где передача ссылкой является более дорогой, чем передача значением в C++? Если так, каков тот случай был бы?

9
задан Garrett 19 May 2014 в 09:17
поделиться

4 ответа

Предполагают прохождение примитивных типов (int, char, float, ...) и структуру POD, которые дешевые для копирования (точка, комплекса) по значению.

Это будет более эффективно, чем косвенное управление, необходимое при прохождении посредством ссылки.

См. См. Чрезвычайные черт повышения .

Класс шаблона Call_traits инкапсулирует метод «Лучший» для передачи параметра некоторого типа T на функцию или из функций, и состоит из коллекции Typedefs, определенных как в таблице ниже. Цель Call_traits состоит в том, чтобы убедиться, что проблемы, такие как «ссылки на ссылки», и что параметры пропускаются наиболее эффективным образом.

15
ответ дан 4 December 2019 в 08:00
поделиться

Вы можете прочитать эту статью «Хотите скорость? Pass по значению» о копировании ELINISE и RVO (возврат по оптимизации стоимости). Это объясняет, что ссылки иногда предотвращают их делать компилятора.

7
ответ дан 4 December 2019 в 08:00
поделиться

Вы можете вставить @ «Да» или @ «Нет» String Objects и Cocoa будут бросать его в Bool, как только вы прочитаете их обратно.

В противном случае я бы предложил создать словарь с использованием фабричного метода, подобного разрабатывающим словарьокритообязанью .andkeys: .

-121--941332-

Bool не является объектом - это синоним int и имеет 0 или 1 в качестве его значений. В результате он не будет введен в объектсодержащую структуру.

Вы можете использовать NSNumber для создания оболочки объекта для любых целочисленных типов; Там есть конструктор [Nsnumber NumberwithBool:] , который вы можете вызывать, чтобы получить объект, а затем использовать это. Точно так же вы можете использовать это, чтобы снова получить объект: [OBJ Bovolvalue] .

-121--941330-

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

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

Компилятор может оптимизировать передачу примитивного типа посредством ссылки на простое прохождение по значению, если тип такой же размер или меньше, чем размер ссылки / указатель. Там нет гарантии, компилятор сделает это, поэтому, если у вас есть выбор, пропустите примитивные типы по значению. В ходе шаблонного кода вы часто должны пройти по ссылке - подумайте о pushback vector, который принимает ссылку на константу. Если у вас есть вектор INT, вы бы передали ссылку на примитивный тип. В этой ситуации вы надеетесь, что компилятор оптимизирует, что подставляя ссылку со значением. Поскольку вектор может хранить большие типы, хотя, принимая ссылку на постоянную - лучший выбор.

1
ответ дан 4 December 2019 в 08:00
поделиться
Другие вопросы по тегам:

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