static istnieją i można ich użyć nawet wtedy, gdy nie utworzymy obiektu, a non-static wymagają utworzenia wcześniej obiektu. I wszystkie funkcje są domyślnie non-static, a jeśli chcemy aby były static, to trzeba dodać słowo "static" przed.
Zgadza się. Metoda statyczna niczym nie różni się globalnej funkcji poza tym, że ma dostęp do private/protected static members danej klasy.
Druga sprawa:
struct A
{
void nonstat(int);
static void stat(int);
};
Na nonstat wskazuje wskaźnik typu void(A::*)(int) a na stat typu void(*)(int).
Drugie znaczenie słowa static dla funkcji dotyczy funkcji nie będących składowymi klasy (non-member functions?) i oznacza, że funkcja jest lokalna dla jednostki translacji (w uproszczeniu - plik źródłowy, tzn. *.cpp). Wtedy linker nie zwraca na taką funkcję uwagi, więc możesz mieć wiele takich translation-unit-local funkcji o tej samej nazwie, ale w innych plikach źródłowych. Od C++11 służy do tego też nameless namespace.
static void f(int) { /* blah blah */ }
// to to samo co:
namespace
{
void f(int) { /* blah blah */ }
}