【面试题研究2】缺省参数是编译期还是运行期决定

   结论:缺省参数是在编译期决定的。

   示例代码:

class classA
{
public: 
	classA(){}
	~classA(){}  
	virtual void print(int val = 1)
	{
		cout<<"from classA "<<val <<endl;
	}
};
class classB: public classA
{
public:
	classB(){}
	~classB(){}
	virtual void print(int val = 2)
	{
		cout<<"from classB "<<val <<endl;
	} 
};
int _tmain(int argc, _TCHAR* argv[])
{ 
	classB b;
	classA *pa = &b;
	b.print();
	pa->print();  
	classA a; 
	a.print(); 
	return 0;
}	

上述代码输出:
from classB 2
from classB 1
from classA 1
 
由于pa和b都是指向一个classB实例,因此运行时 会调用classB:print, 但缺省参数是在编译期决定的。
在编译时,pa被声明为classA类型的指针,因此会按照classA::print的声明把缺省参数设为1。
因此我们平时应该避免这种会导致意料之外的结果的写法,

《Effective C++》的第37条亦有论述:
绝不要重定义一个函数通过继承得到的缺省参数值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值