您的位置:首页 > 其它

虚函数默认参数的问题记录

2009-08-03 14:56 405 查看
刚看了看项目里的问题,对虚函数默认参数的问题有点儿遗忘,翻了翻资料:

#include "stdafx.h"

class Base
{
public:
virtual void foo(int i = 3) = 0;
};

class Derived: public Base
{
public:
virtual void foo(int i = 5)
{
printf("i is %d/n", i);
}

};

int _tmain(int argc, _TCHAR* argv[])
{
Base* pB = new Derived();
pB->foo();

getchar();

return 0;
}


the result is: "i is 3"

原因:

为什么C++坚持这种有违常规的做法呢?答案和运行效率有关。如果缺省参数值被动态绑定,编译器就必须想办法为虚函数在运行时确定合适的缺省值,这将比现在采用的在编译阶段确定缺省值的机制更慢更复杂。做出这种选择是想求得速度上的提高和实现上的简便,所以大家现在才能感受得到程序运行的高效;当然,如果忽视了本条款的建议,就会带来混乱。

另外注意如果派生类的foo函数没有缺省函数,并且编写以下代码:

Derived d;

d.foo();

这样是编译不过去的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: