《Effective C++》条款37
2023-12-18 21:29:46
绝不重新定义继承而来的缺省参数值
int x = 0; class A { public: virtual int value(int x = 1) { return x; } }; class B:public A { public: virtual int value(int x = 2) { return x; } };
我们预期输出的结果是2,但是实际输出是1。那是因为虽然函数是动态绑定的,但是缺省参数不是。因为如果缺省参数是动态绑定,编译器就必须有某种办法在运行期为virtual函数决定适当的参数缺省值。影响效率,所以编译器索性不干。所以缺省参数都是静态绑定的。
解决方案: (利用NVI手法)
class A { public: int Value(int x = 1) { return value(x); } private: virtual int value(int x) { return x; } }; class B:public A { public: int Value(int x = 2) { return value(x); } private: virtual int value(int x) { return x; } };
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
文章来源:https://blog.csdn.net/qq_64863535/article/details/135070858
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!