zoukankan      html  css  js  c++  java
  • 条款20.宁以pass-by-reference-to-const替换pass-by-vlaue

        缺省情况下c++以by value的方式传递对象至(或来自)函数。除非你另外指定,否则函数参数都是以实际实参的复件(副本)为初值,而调用端所获得的亦是函数返回值的一个复件。这些复件是由对象的copy构造函数产出,这可能使得pass-by-value成为昂贵的操作.

    #include "stdafx.h"
    #include <iostream>
    #include <string>

    class Window
    {
    public:
        std::string name() const;
        virtual void display() const
        {
            std::cout<<"windows display"<<std::endl;
        }
    };

    class WindowWithScrollBars:public Window
    {
    public:
        virtual void display() const
        {
            std::cout<<"WindowWithScrollBars display"<<std::endl;
        }
    };

    void show(Window w)
    {
        c.display();
    }

    void constshow(const Window &w)
    {
        c.display();
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        WindowWithScrollBars good;
        show(good);//输出windowsdisplay
        constshow(good); //输出windowwithscrollbars display

        return 0;
    }

    注意show()传递的是value,而WindowWithScrollBars的所有特化信息都会被切除。不管你传递过来的对象原本是什么类型,参数w就像一个Window对象,因为他的类型是window.因为在show内调用的display调用的总是window::display,而绝不是widowWithScrollBars::display.

    解决这个切割的问题的办法,就是以by reference-to-const的方式传递w;

    也就是cosntshow看到的效果..如此这般,传入的是什么类型.他就是什么类型.因此pass-by-ference通常意味着真正传递的是指针。

  • 相关阅读:
    关于[一个基于WF的业务流程平台]表设计的说明
    这几年开发工作流的感受
    在Silverlight中绘制贝塞尔曲线
    WF工作流设计器(WPF版)
    基于WF设计业务流程平台_消息收集、通知接口
    基于WF设计业务流程平台_数据冲突
    NET4.0 CTP 中的WF
    NET 4,3,2,1其实什么也没有变
    基于WF设计业务流程平台_权限在流程模板外部映射
    无题
  • 原文地址:https://www.cnblogs.com/crazycodehzp/p/3376304.html
Copyright © 2011-2022 走看看