Wenn ich eine statische lokale Variable oder lokale Variable thread_local innerhalb einer Inline-Funktion habe, die in verschiedenen Übersetzungseinheiten definiert ist, wird im endgültigen Programm garantiert, dass der Standard die gleiche Adresse hat?Lokale statische/thread_local Variablen von Inline-Funktionen?
// TU1:
inline int* f() { static int x; return &x; }
extern int* a;
void sa() { a = f(); }
// TU2:
inline int* f() { static int x; return &x; }
extern int* b;
void sb() { b = f(); }
// TU3:
int *a, *b;
void sa();
void sb();
int main() { sa(); sb(); return a == b; }
Wird oben immer 1 zurückgegeben?
Danke, und ich denke, der 'thread_local' Fall hat eine ähnliche Antwort? –
@AndrewTomazos: Ja, ich denke schon, weil durch [dcl.stc]/4 der 'thread_local'-Spezifizierer den' statischen' Spezifizierer impliziert, und die Regel, die ich in der Antwort anführte, gilt für den * Spezifizierer *, nicht für den Speicher Klasse. –