据我所知,在类中定义的每个非静态成员函数都是隐式内联的.现在我想知道静态成员函数是否有效,考虑到我可以在不同的翻译单元中多次定义函数.
举个例子:
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;
};
Run Code Online (Sandbox Code Playgroud)
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)[...]
Lig*_*ica 11
是.
我会引用标准,但你已经做过了.
考虑到我可以在不同的翻译单元中多次定义函数.
只有当您保证内容相同时,才能使其成为非问题.
一定不要混淆"声明"和"定义" - 只有当您在类定义中提供函数体时才会适用.这也使你的担忧成为一个问题.
// "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);
Run Code Online (Sandbox Code Playgroud)
最后,请注意这些函数将被隐式标记inline,但这与实际内联不同.
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |