您的位置:首页 > 职场人生

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

2013-04-12 21:12 218 查看
结论:缺省参数是在编译期决定的。

示例代码:

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条亦有论述:

绝不要重定义一个函数通过继承得到的缺省参数值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐