Const и static являются ортогональными понятиями в C и C ++.
Ключевое слово const
указывает компилятору запретить отображать переменную как lvalue любого выражения - по сути, делая ее доступной только для чтения.
В C ключевое слово static
имеет несколько применений в зависимости от того, к чему оно применяется. Применительно к переменной функции это указывает на то, что переменная не хранится в локальной области действия функции, но доступна через все ее вызовы. При применении к глобальной переменной или функции она становится доступной только для определенного файла - другими словами, она доступна только внутри модуля компиляции (если не объявлено extern
).
В C ++ ключевое слово static
можно использовать в определении класса, чтобы создать переменную или функции shared для всех экземпляров класса, а не быть локальными для каждого экземпляра. Кроме того, функция статического класса в C ++ может обращаться только к статическим переменным этого класса (или к классам, к которым она имеет доступ). Теперь в C ++ const
дает внутреннюю связь членов с модулем компиляции, если они явно не объявлены extern
- это может быть то, что вы на него ссылаетесь. Это позволяет совместно использовать константы времени компиляции через модуль с помощью заголовочных файлов. Имейте в виду, однако, что члены на самом деле не являются статическими - скорее, константа компилируется в в каждом месте, где на нее ссылаются.