Static function vs Static member functions C++ [duplicate]
Asked Answered
G

1

7

I've been reading a bit about static functions and static member functions. From my understanding if a function is declared static then this function is only visible to it's translation unit and nowhere else. A static member function instead is a function that can be called without instantiating any object of its class (so you can use it like it was in a name space).

To clarify with static function I mean something like

static int foo(int a, int b)
{
   return a + b;
}

And with static member function I mean

struct MyClass
{
   static int foo(int a, int b)
   {
      return a + b;
   } 
}

Is this the only difference? or is the visibility within the same translation unit still a common feature for the two of them?

Guan answered 20/4, 2020 at 11:58 Comment(6)
Are you only asking about internal/externable linkage or are you looking for all differences? E.g., a static member function can be called using the dot operator on an instance of the class, while a static nonmember function cannot.Pinnati
@AndyG, nothing about syntax. Mainly about linkage.Guan
A static member function is still a member function, it just doesn't need an object to be called on (which means it has no this pointer). It can be seen as a class-function instead of an object-function, and is available for all translation units which have the declaration of it. A static non-member (also called namespace-scope) function have static storage duration and internal linkage.Gratifying
static is one of the keywords with different meanings depending on context. Don't get confused by the same keyword being used for different things (en.cppreference.com/w/cpp/keyword/static)Miriam
@user8469759: Then it seems you understand it well enough already. Just bear in mind that in gcc symbols are exported by default but in MSVC we need to explicitly export/import them with the __declspec directive. So even for a static member function, it may not be visible outside its translation unit in Windows unless you make it so.Pinnati
Why was the question closed? The other question asks when to use friend vs static member function...Guan
D
11

As you can see on this page, static actually has 3 different meanings depending on where it's used.

  1. If it's used inside a block scope, like inside a function, then it'll make a variable persist across function calls.
  2. If a class method is declared as static, then it's not bound to a specific instance of the class.
  3. If a namespace member is declared as static, then it has internal linkage only.
Denims answered 20/4, 2020 at 12:4 Comment(1)
Ok, so the differences I spot where the right ones then.Guan

© 2022 - 2024 — McMap. All rights reserved.