+ -
当前位置:首页 → 问答吧 → C++代码经过编译后,虚函数的默认参数值最后放到哪里去了?

C++代码经过编译后,虚函数的默认参数值最后放到哪里去了?

时间:2010-08-31

来源:互联网

有如下两个类的定义:
class A
{
public:
virtual void methd(int a =  9) {return a};
};
class B:A
{
public:
void methd(int a =10) {return a};
};

请问,如下代码输出结果是10还是9?
A *ptr = new B ;
B.methd();

为什么会出现这样的情况,其编译处理的过程是怎么样的?

作者: xb_parasite   发布时间: 2010-08-31

Effective C++:
Item 37: Never redefine a function's inherited default parameter value

作者: insnowind   发布时间: 2010-08-31

对,楼上说得很对,所谓默认参数,只是编译器的一个把戏而已,其实编译出来的代码是假设那里有参数的,虚函数是运行时的功能,所以我估计编译时只能看到编译时的东西,也就是说输出是9

作者: morocco   发布时间: 2010-08-31

回insnowind :这个问题正是大家一起讨论effective c++ 37条是推出的问题。虽然知道结果,但是,是编译的时候是怎么一个处理过程,为什么会导致这样 ?

回morocco:我们也是同样的猜测。但是谁能给出明确的编译过程? 我是对编译过程不太了解哦。猜个大概的话,我想只是大众水平

期待高人!

作者: xb_parasite   发布时间: 2010-08-31