zoukankan      html  css  js  c++  java
  • 完美转发

    完美转发

    #include <iostream>
    #include <string>
    #include <utility>
    
    using std::cout;
    using std::endl;
    using std::string;
    
    class  Name
    {
    public:
        Name(const string & aName) :name{aName}
        {
            cout << "Lvalue Name constructor." << endl;
        }
    
        Name(string && aName) :name{ std::move(aName) }
        {
            cout << "Rvalue Name constructor." << endl;
        }
        
        const string & GetNmae()const
        {
            return name;
        }
    
    private:
        string name;
    
    };
    
    
    class Person
    {
    public:
        template<typename T1,typename T2>
        Person(T1 && first, T2 && second) :firstname{ std::forward<T1>(first) }, seondname{ std::forward<T2>(second) }
        {
            cout << "-------------------" << endl;
        }
    
        string getName()const
        {
            return firstname.GetNmae() + " " + seondname.GetNmae();
        }
    
    private:
        Name firstname;
        Name seondname;
    };
    
    int main()
    {
        Person me{ string{"Ivor"},string{"Horton"} };
        cout << me.getName() << endl << endl;
    
        string first{"Fred"};
        string second{"Fernackerpan"};
        Person other{first,second};
        cout << other.getName()<< endl << endl;
    
        Person brother{ first,string{"Bloggs"} };
        cout << brother.getName() << endl << endl;
    
        Person another{"Richard","Horton"};
        cout << another.getName() << endl;
    }

    输出结果:

    Rvalue Name constructor.
    Rvalue Name constructor.
    -------------------
    Ivor Horton

    Lvalue Name constructor.
    Lvalue Name constructor.
    -------------------
    Fred Fernackerpan

    Lvalue Name constructor.
    Rvalue Name constructor.
    -------------------
    Fred Bloggs

    Rvalue Name constructor.
    Rvalue Name constructor.
    -------------------
    Richard Horton

  • 相关阅读:
    如何判断DataSet里有多少个DataTable
    ADO.NET五大对象详解
    c# 中的封装、继承、多态详解
    什么是递归算法
    反射是什么
    什么是泛型
    方法中参数的类型详细
    Struts2学习笔记二 配置详解
    Struts2学习笔记一 简介及入门程序
    Hibernate学习笔记四 查询
  • 原文地址:https://www.cnblogs.com/yunqie/p/5958143.html
Copyright © 2011-2022 走看看