Ответ 1
Причина заключается в том, что дух С++ пытается минимизировать количество ключевых слов и поддерживать обратную совместимость с C: static
в этой позиции имеет совершенно другое значение.
Все это возвращается к C. "Статические" функции в C - это функции, которые уникальны для единицы компиляции (файл .c). К другим модулям компиляции они не могут быть доступны (это один из способов инкапсуляции на C). Это использование все еще действует на С++. Вы также можете сделать то же самое для глобальных переменных, чтобы ограничить область действия.
Хотя на С++ вы также хотите объявить функции-члены как static
по другой причине: эти функции принадлежат классу, но не требуют и экземпляр указанного класса для запуска (я уверен, вы уже знаете, что я просто пытаясь быть полным).
Определение функции-члена как static
приведет к противоречию: эту функцию нужно получить за пределами ее единицы перевода.
В другом случае повторное использование ключевого слова между C и С++, ключевым словом auto
в С++ 11, но это вряд ли будет проблемой.
Примечание:
То же самое происходит с ключевым словом virtual
, которое присутствует в объявлении, а не в определении.