是否在隐式内联的类中定义了静态成员函数?

时间:2013-12-12 17:42:14

标签: c++ function static inline

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

举个例子:

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;
};

PS:在本文档(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)[...]

1 个答案:

答案 0 :(得分:10)

我会引用标准,但你已经做过了。

  

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

只有当您保证内容相同时,才能使其成为非问题。

请确保不要混淆“声明”和“定义” - 只有当您在类定义中提供函数体时才会适用。这也使你的担忧成为一个问题。

// "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,但这与实际内联不同。