インライン関数と static について疑問
ふと,C++ のインライン関数について,static との関係で疑問が浮かんだ.静的なインライン関数は全然問題ないと思うんだけれど,
static inline void func() { ... }
静的ローカル変数を持つインライン関数ってインライン化されるのか?
inline void func() { static int n = 1; ... }
インライン化 = コンパイラによって関数が呼び出し元で展開される,と理解しているのだけれど,もし上の関数が複数のソースでインライン展開されて複数のオブジェクトファイルになった場合,静的変数 n の実体が謎なことになりそうだ.インライン化不可なので要請がコンパイラに無視されて終了,なのだろうか.
追記
というか,インライン関数をヘッダファイルで定義してコンパイラがインライン化を拒否した場合,その実体はどこに行くんだろう.とりあえず必要なオブジェクトに全部入れておいて,リンカが重複を削除するのだろうか.うーむ,分からない.