虚函数默认参数的问题记录
2009-08-03 14:56
405 查看
刚看了看项目里的问题,对虚函数默认参数的问题有点儿遗忘,翻了翻资料:
the result is: "i is 3"
原因:
为什么C++坚持这种有违常规的做法呢?答案和运行效率有关。如果缺省参数值被动态绑定,编译器就必须想办法为虚函数在运行时确定合适的缺省值,这将比现在采用的在编译阶段确定缺省值的机制更慢更复杂。做出这种选择是想求得速度上的提高和实现上的简便,所以大家现在才能感受得到程序运行的高效;当然,如果忽视了本条款的建议,就会带来混乱。
另外注意如果派生类的foo函数没有缺省函数,并且编写以下代码:
Derived d;
d.foo();
这样是编译不过去的
#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();
这样是编译不过去的
相关文章推荐
- 第五章 函数 --函数的默认参数问题
- 虚函数的默认参数问题
- C++里面的重写带有默认参数的虚函数的问题
- 函数的默认参数重复定义问题
- python 函数默认参数的问题
- 继承和基类的虚函数的访问限制和默认参数值的问题
- 函数的默认参数与内联函数
- C语言中实参和形参问题&&函数使用数组作为参数的问题
- 使用c函数库的两个函数strtok, strncpy遇到的问题记录
- AIDL中遇到的问题,记录一下 + 避免绑定启动service 后 activity 与service 之间参数为null的情况
- C++中关于将fstream对象作为函数参数传递相关问题说明
- R lattice包中的panel函数参数传输的一个问题
- 函数参数用指针或引用传递时发现的一个小问题
- C语言可变长参数函数与默认参数提升
- 零基础学python-2.19 定义函数、调用函数与默认参数
- js问题-解决定时器不能传入函数参数问题
- c++中函数的默认参数(5)
- 用一个不带原型声明的函数时默认实际参数提升
- 辛星浅谈PHP中的函数的默认参数必须在右边吗
- js自定义函数及参数问题