转:
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的意思是“在编译期间将调用之处用被调函数来代替”,如果编译器甚至还不知道哪个函数将被调用,当然就不能责怪它拒绝生成内联调用了)。
本文探讨了C++中虚函数与内联函数的使用情况,特别是两者结合使用时的行为表现。当一个函数同时被声明为虚函数和内联函数时,不同编译器的处理方式可能会有所不同。
1348

被折叠的 条评论
为什么被折叠?



