是在隐式内联的类内部定义的静态成员函数
Is a static member function defined inside a class implicitly inlined?
据我所知,类中定义的每个非静态成员函数都是隐式内联的。现在,考虑到我可以在不同的翻译单元中多次定义函数,我想知道这是否对静态成员函数有效。
例如:
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
,但这与实际内联不同。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如何在C++中使用非静态成员函数作为回调函数
- (C++)为什么静态成员可以在初始化之前使用
- 类的全局对象和静态成员
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 模板化类中静态成员的延迟初始化
- 使用静态成员声明类时遇到问题
- C++:是否可以使用非静态成员变量模板?
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 如何在复杂继承中访问静态成员变量
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 结构内部的结构:"对非静态成员的非法引用"错误
- 是在隐式内联的类内部定义的静态成员函数
- 常量静态成员初始化 - 类定义内部与外部类定义
- 是否有可能在C++中的静态成员方法内部调用非静态成员方法
- 非静态成员函数是否可以具有与其内部定义的类相同的类型?
- 类模板专门化内部的静态成员函数
- 在另一个类内部构造一个类(非静态成员引用必须相对于特定对象)
- 创建指向header内部所有公共静态成员函数的指针数组,然后使用它