Из оффтопа темы
const или static constАвтор: Alexander G
Дата: 27.07.08
Существуют различные способы определить нешаблонную функцию или константу в хидере, не получив ошибку связывания при включении этого хидера в различные единицы трансляции: инлайн, внутреннее связывание, безымянное пространство имён, препроцессор. Все способы имеют различные последствия.
inline
Внешнее связывание.
static локальные переменные общие на все единицы трансляции.
определения в различных единицах обязаны совпадать согласно One Definition Rule.
хинт компилятору насчёт встраивания (обычно ничего не значит, значимость варьируется от компилятора и опций)
static для функций, отустствие extern для констант
Внутреннее связывание.
static локальные переменные различные на все единицы трансляции.
определения в различных единицах не обязаны совпадать.
никакого влияние на встраивание.
namespace { ... }
Внешнее связывание. При этом имя наружу не видно, единственное на что влияет внешнесть связывания — параметризация шаблонов.
static локальные переменные различные на все единицы трансляции.
определения в различных единицах не обязаны совпадать.
никакого влияние на встраивание.
#define
Игнорирует пространсва имён и области видимости, в следствии чего яляется нежелательным в С++.
Нет связывания.
static локальные переменные различные на все единицы трансляции.
определения в различных единицах не обязаны совпадать.
встраивание ещё до собственно компиляции.
Всё ли я учёл ?