При прочих равных условиях я передаю const & amp; для достаточно сложных классов и значения для POD и простых объектов.
Выравнивание плюсов и минусов для передачи по константной ссылке вместо традиционного прохода по значению
Позитивы:
Отрицательные:
. Что еще более важно с позитивами, вы явно контролируете, когда происходит копирование (в вашем случае при передаче инициализации _b в ваш список инициализаторов). Думая о негативах ... Я согласен, что это риск. Я думаю, что почти все хорошие программисты будут чувствовать себя грязными по поводу использования const_cast. Кроме того, вы можете послушно искать const_cast и бросать помидоры в лицо, литье const из аргумента. Но эй, вы никогда не знаете и у кого есть время, чтобы смотреть код как ястреб:)?
Мое субъективное мнение состоит в том, что в достаточно сложных классах и в средах, где производительность имеет значение, избегать конструктора копирования перевешивает риск. Однако для действительно немых и POD-классов я стараюсь делать копии данных и передавать их по значению.