是在隐式内联的类内部定义的静态成员函数

Is a static member function defined inside a class implicitly inlined?

本文关键字:内部 静态成员 函数 定义      更新时间:2023-10-16

据我所知,类中定义的每个非静态成员函数都是隐式内联的。现在,考虑到我可以在不同的翻译单元中多次定义函数,我想知道这是否对静态成员函数有效。

例如:

class Foo {
public:
    static void static_f(void) { std::cout << static_data << std::endl; } //Is it inline?
    static void static_f2(void); //I guess it isn't
private:
    static int static_data;
    int non_static_data;
};

附言:在这份文件中(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf)我发现了这几行:

9.4.1静态成员函数[class.Static.mfct]1[注:9.3中描述的规则适用于静态成员函数。--结束注释]

以及之前的第9.3节:

成员函数可以在其类定义中定义(8.4),在在这种情况下,它是一个内联成员函数(7.1.2)[…]

我想引用标准,但你已经引用了。

考虑到我可以在不同的翻译单元中多次定义函数。

只有在您保证内容相同的情况下,才不会出现此问题。

确保不要混淆"声明"answers"定义"—只有当您在类定义中提供函数体时,这些才适用。这也让你的担忧成为一个问题。

// "Is it inline?"      YES.
static void static_f(void) { std::cout << static_data << std::endl; }
// "I guess it isn't"   Nope.
static void static_f2(void);

最后,请注意,这些函数将被隐式标记为inline,但这与实际内联不同。