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

标签 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 Static member functions [class.static.mfct] 1 [ Note: The rules described in 9.3 apply to static member functions. — end note ]

和之前在第 9.3 节中:

A member function may be defined (8.4) in its class definition, in which case it is an inline member function (7.1.2) [...]

最佳答案

是的。

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

considering that I can define the function multiple times in different translation units.

只有当您保证内容相同时,这才不是问题。

请确保不要将“声明”和“定义”混为一谈——只有当您在类定义中提供函数体时,这些才适用。这也让您的担心不再是问题。

// "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);

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

关于c++ - 类中定义的静态成员函数是否隐式内联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20550459/

相关文章:

c++ - 通用模板化枚举空值

c++ - 如何在qt中获取QModelIndexList中的值?

javascript - 如果我们在这个函数之外定义一个函数变量,那么这个变量属于什么样的作用域呢?

r - do.call 在函数中 - 找不到对象错误

c++ - 这段代码有什么问题?

c++ - 什么可以唤醒一个条件变量

"return"的 C++ 说明

matlab - 用 {} 运算符包装函数是 'UniformOutput' 的有效替代品,在 cellfun 中是 false 吗?

c++ - 函数比较器可以是静态函数吗?

java - static HashMap 导致内存泄漏,但是如何纠正它?