转:
class A{
char c;
int x;
static int zzz;
public:
virtual int max(int y){return y>x?y:x;}
void set(char xx, int z){c = xx; zzz = z;}
int get(){return x;}
virtual void print(){cout<<"A.c = "<<c<<" A.x = "<<x<<endl;}
};
用virtual修饰后,无所谓inline不inline了,都是在运行期绑定的
所以,代码在g++和VC下的结果符合C++标准(肯定符合
我的感觉和3楼的一样,用vurtural 和inline时,编译时都会通过的,只是内联函数的作用就没用了
条款33: 明智地使用内联
还有,即使是最简单的虚函数调用,编译器的内联处理程序对它也爱莫能助。(这一点也不奇怪。virtual的意思是“等到运行时再决定调用哪个函数”,inline的意思是“在编译期间将调用之处用被调函数来代替”,如果编译器甚至还不知道哪个函数将被调用,当然就不能责怪它拒绝生成内联调用了)。
所以不同的编译器,结果会不同