C++代码经过编译后,虚函数的默认参数值最后放到哪里去了?
时间:2010-08-31
来源:互联网
有如下两个类的定义:
class A
{
public:
virtual void methd(int a = 9) {return a};
};
class B:A
{
public:
void methd(int a =10) {return a};
};
请问,如下代码输出结果是10还是9?
A *ptr = new B ;
B.methd();
为什么会出现这样的情况,其编译处理的过程是怎么样的?
class A
{
public:
virtual void methd(int a = 9) {return a};
};
class B:A
{
public:
void methd(int a =10) {return a};
};
请问,如下代码输出结果是10还是9?
A *ptr = new B ;
B.methd();
为什么会出现这样的情况,其编译处理的过程是怎么样的?
作者: xb_parasite 发布时间: 2010-08-31
Effective C++:
Item 37: Never redefine a function's inherited default parameter value
Item 37: Never redefine a function's inherited default parameter value
作者: insnowind 发布时间: 2010-08-31
对,楼上说得很对,所谓默认参数,只是编译器的一个把戏而已,其实编译出来的代码是假设那里有参数的,虚函数是运行时的功能,所以我估计编译时只能看到编译时的东西,也就是说输出是9
作者: morocco 发布时间: 2010-08-31
回insnowind :这个问题正是大家一起讨论effective c++ 37条是推出的问题。虽然知道结果,但是,是编译的时候是怎么一个处理过程,为什么会导致这样 ?
回morocco:我们也是同样的猜测。但是谁能给出明确的编译过程? 我是对编译过程不太了解哦。猜个大概的话,我想只是大众水平
期待高人!
回morocco:我们也是同样的猜测。但是谁能给出明确的编译过程? 我是对编译过程不太了解哦。猜个大概的话,我想只是大众水平
期待高人!
作者: xb_parasite 发布时间: 2010-08-31
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28