C ++ Имеет ли смысл объявить шаблонную функцию со статическим встроенным? - PullRequest
3 голосов
/ 06 июля 2011

У нас нет «внешнего шаблона», а функция «шаблона» всегда «неявно встроенная». В любом случае это имеет смысл?

1 Ответ

5 голосов
/ 06 июля 2011

Это не имеет смысла для меня. Шаблон функции не является «неявным встроенным». Вы должны явно объявить его «встроенным», чтобы сделать его встроенным.

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

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

Размещение static для функций и шаблонов функций, тем не менее, не зависит от помещения inline для них. static и inline не зависят от C ++, как , они находятся в C99 .

...