Как программист C ++, меня научили простому правилу передачи параметров:
Передача параметра T
по значению, когда sizeof(T) <= sizeof(void*)
или для конструирование на месте и перемещение в .
Однако стандартная библиотека C ++, похоже, не соответствует правилу. Для пример , sizeof(std::initializer_list<T>)
больше, чем sizeof(void*)
, но std::vector
имеет конструктор:
vector(std::initializer_list<T>, const Allocator&);
Почему стандартная библиотека C ++ всегда передает std::initializer_list<T>
по значению, а не по ссылке?