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

C++ 类中定义的静态成员函数是否隐式内联?,c++,function,static,inline,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

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

例如:

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;
};
class-Foo{
公众:
静态无效静态(无效){std::cout是。

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

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

只有当你保证内容是相同的,这是一个非问题

// "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);
请确保不要将“声明”和“定义”混为一谈——只有在类定义中提供函数体时,这些才适用。这也使您的担心成为一个问题

// "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);
/“它是内联的吗?”是。

静态空隙静态_f(空隙){std::cout-Yes,但是如果您担心它,那么插入
inline
关键字不会有任何影响。函数将是
inline
,这并不意味着它将是内联的+1。请注意,尽管
静态
或非静态,但如果在类本身内部定义,则所有成员函数都是内联的。