关于结构成员函数的C ++问题。
f1()
和f2()
除了名字之外有什么区别?
struct F{
int f1(){
return 0;
}
int f2();
};
int F::f2(){
return 0;
}
我可以说f1()
是内联的,但f2()
不是吗?
答案 0 :(得分:10)
你是正确的f1
是内联的,f2
不是,但它不是只是,因为它是在类中定义的。 f2
如果定义为
inline int F::f2() {
return 0;
}
C ++ 11规范9.3节说f1
“在其类定义中定义”,f2
“在其类定义之外定义”。然后它声明在其类定义中定义的任何函数都是内联的,而在其类定义之外定义的函数必须明确标记为内联(如上例中所示),否则它们是非内联的(如f2
})。
除了使函数隐式内联之外,定义内部与定义之外的定义并不重要。类定义内部和类定义之外的概念仅出现在9.3.2-9.3.5中,而“内联”的更广泛概念出现在规范的其他部分中。