почему boost :: call_traits <double>:: param_type равен "const double &", а не "double" - PullRequest
6 голосов
/ 29 ноября 2011

Я использую код "boost :: call_traits :: param_type" на программе win32 на компьютере под управлением Windows 7. К моему удивлению, это не "double", а "const double &".

Я думал, что все примитивные типы хороши для использования "передачи по значению" для параметров функции, разве это не здравый смысл? Потому что многие люди используют is_pod для определения использования ссылки или нет, не так ли?

Ответы [ 2 ]

4 голосов
/ 29 ноября 2011

Эта оптимизация, по-видимому, применима только к «маленьким» встроенным типам, в соответствии с doc .

. При быстром взгляде на источник , она выглядитПод «малыми» типами понимаются те, которые удовлетворяют sizeof(T) <= sizeof(void *).На 32-битной машине это, очевидно, не включает double.

В некоторых случаях может быть лучше передать параметры как double, а не double const&, но, как всегда, вы должны иметьдля тестирования и тестирования ...

0 голосов
/ 29 ноября 2011
Шаблон класса

boost::call_traits не специализирован для double.Шаблон первичного класса возвращает const T &, поэтому он равен const double &, а не double, хотя в данном случае это не имеет большого значения, но имеет значение, является ли T типом класса, который имеет огромныйчлены данных.Чтобы избежать ненужного копирования, это постоянная ссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...