I can't find a good explanation about global non static variables in unnamed namespace. I avoid global variables as much as I can. In this particular case I'm interested about behaviour just from pure theoretic side.
Suppose the following code:
In a.h
namespace ai {
class Widget {
void DoSomething(int param);
};
}
In a.cc
namespace {
int x;
void Helper() {
}
}
namespace ai {
void Widget::DoSomething(int param) {
x = param;
Helper();
}
}
If I would create two instances of the same class Widget, will both instances share the same variable x?
Is above behaviour the same if class instances are on the same thread vs different threads?
What if the variable x would be custom type instead of built-in type?
When variable x will be contructed and when destructed?
Is any relation between sizeof(Widget) and such variables?
What aspects are defined in C++ standard and what not?
Any other considerations, e.g. "need to know" about that topic? Maybe anyone could provide good book reference (e.g. "Effective C++..") to read more?