【面试题研究2】缺省参数是编译期还是运行期决定
2013-04-12 21:12
218 查看
结论:缺省参数是在编译期决定的。
示例代码:
上述代码输出:
from classB 2
from classB 1
from classA 1
由于pa和b都是指向一个classB实例,因此运行时 会调用classB:print, 但缺省参数是在编译期决定的。
在编译时,pa被声明为classA类型的指针,因此会按照classA::print的声明把缺省参数设为1。
因此我们平时应该避免这种会导致意料之外的结果的写法,
《Effective C++》的第37条亦有论述:
绝不要重定义一个函数通过继承得到的缺省参数值。
示例代码:
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条亦有论述:
绝不要重定义一个函数通过继承得到的缺省参数值。
相关文章推荐
- 静态变量在什么时候加载?编译期还是运行期?静态代码块加载的时机呢?
- C++编译期多态与运行期多态
- 风险意识,决定了是事半功倍,还是事倍功半,甚至决定了...
- 决定你是富人还是穷人的12条
- 【随想】关于【编译期确定与运行期确定】和【静态内存与动态内存】
- C++ 函数运行期和编译期运行
- MediaRecorderClient决定使用stagefright还是opencore实现录音录像的代码实现
- 我刚刚作出了一个非常艰难的决定,还是把这个贴子发出来
- WSAAsyncSelect 模型 - 还是接着以前的socket、 部分继续研究, 近期将精力 放在各种模型上面,比较缺点,实现出来
- Effective C++第七章-模板和泛型编程之编译期多态(运行期多态)和隐式接口(显式接口)
- JAVA面试题解惑系列(五)——传了值还是传了引用?
- ajax之Content-Type决定form-data方式提交还是request-payloud等
- oracle 性能优化操作十八: 决定使用全表扫描还是使用索引
- c++ 之 编译期多态&运行期多态
- 决定你是富人还是穷人的12条标准
- 多态性之编译期多态和运行期多态(JAVA版)
- JAVA面试题解惑系列(五)——传了值还是传了引用?
- 关于DHCP服务器的offer与ack阶段是单播还是广播的研究
- 虽然不是我的面试题,但是对C++情有独钟的菜鸟还是可以看看的!
- JAVA面试题解惑系列(五)——传了值还是传了引用?