“static” in C++

Agenda:

Inside struct/class

  • Case 1: without “static”
  • Case 2: with “static”
  • Case 3: with “static” — better way to call static member

Outside struct/class

  • Case 1: without “static”
  • Case 2: with “static”

— — — — — — — — — — — — — — — — — — — — — — — — — —

“static” could has 2 different meaning corresponding to it’s context:

  • inside struct/class
  • outside struct/class

“static” inside struct/class

The “static” member will share memory with all the instance of the struct/class. No matter how many instances of struct/class are created, there is only one “static” member.

  • If an instance changes the “static” member, this change can be see from all the instances.

Case 1: without “static”

Both e and e1 has their own member of x and y:

Case 2: with “static”

Even through we have 2 entities e and e1, they are pointing at the same x and y of Entity. Therefore we printed the same value.

Case 3: with “static” — better way to call static member

We usually use “Entity::x” to call the static variables, as if x and y are variables under a namespace “Entity”

⚠️ Note:

  • static function also works in similar way
  • static function CANNOT access non-static variable

“static” outside struct/class

The “static” member is internal and ONLY visible in it’s own translation unit(in most case also means it’s own *.cpp file).

  • Linker doesn’t need to link it to other file, because there won’t be any other file using this “static” member

Case 1: without “static”

Following situation caused error due to the duplicated declaration of variable “s_Variable”

Case 2: with “static”

static variable is ONLY available in Static.cpp’s scope. Therefore the Linker won’t find any conflict.

🦠 🈲️ 🌎