Недавно я немного узнал о ключевом слове static
перед функцией, и мне интересно, как правильно ее использовать.
1) Когда следует писать ключевое слово static
перед функцией, отличной от члена?
2) Опасно ли определять статическую не-членную функцию в заголовке? Почему (не)?
(побочный вопрос)
3) Можно ли определить класс в файле заголовка определенным образом, чтобы он был доступен только в блоке перевода, где вы его используете в первую очередь?
(Причина, по которой я спрашиваю об этом, заключается в том, что я изучаю STL, и это может быть хорошим решением для моих предикатов и т.д. (возможно, функторов), так как я не люблю определять функции, отличные от функций-членов в файл cpp)
(Кроме того, я думаю, что это связано с исходным вопросом, потому что, согласно моим текущим рассуждениям, он будет делать то же самое, что и static
перед выполнением функции)
ИЗМЕНИТЬ
Другой вопрос, который возник при просмотре ответов:
4). Многие говорят мне, что я должен объявить статическую функцию в заголовке и определить ее в исходном файле. Но статическая функция уникальна для единицы перевода. Как связующее звено знает , что единица перевода является уникальной, поскольку файлы заголовков напрямую не связаны с исходным файлом (только при их включении)?