V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
smallghost
V2EX  ›  程序员

c++这样的构造函数怎么使用?

  •  
  •   smallghost · Oct 25, 2013 · 4137 views
    This topic created in 4569 days ago, the information mentioned may be changed or developed.
    class A {
    public:
    A(A&);
    };

    A::A(A&) {
    // 这里的A&表示啥?怎么使用呢?
    }
    9 replies    1970-01-01 08:00:00 +08:00
    timonwong
        1
    timonwong  
       Oct 25, 2013
    拷贝构造函数。

    A a1 = A();
    A a2 = a1;
    yujnln
        2
    yujnln  
       Oct 25, 2013
    楼上例子错了吧?
    A a2 = A(a1);

    A&代表class A对象的引用
    smallghost
        3
    smallghost  
    OP
       Oct 25, 2013
    class A {
    public:
    A(A&);
    int i;
    };

    int main() {
    A a;
    a.i = 100;
    A c(a);
    A b = a;
    // 这里 c.i 和 b.i 是多少呢?
    return 0
    }
    pagict
        4
    pagict  
       Oct 25, 2013
    都是100啊
    dorentus
        5
    dorentus  
       Oct 25, 2013
    @yujnln 没错的。

    就拿你这个「A a2 = A(a1);」为例,A(a1) 可以理解成把 a1 转型为 A 类型,但是 a1 本身就是 A 的实例,于是直接写 a1 就足够了。

    另外如果没有特殊原因,拷贝构造函数最好写成这样吧:A(const A&); 这样写你就表明了你这个函数里面不会对传入的参数作修改。
    66beta
        6
    66beta  
       Oct 25, 2013
    复制/拷贝构造函数

    A&表示一个A类对象的引用
    函数参数分为:传值和传引用(地址)


    上周刚考过C++,我感觉能过 XD
    Golevka
        7
    Golevka  
       Oct 25, 2013
    C++ 11又多了一个move constructor (A::A(A &&)), 于是情形变得乱上加乱.

    "Only a computer scientist would create a copy, and then destroy the original" --Bjarne Stroustrup on GoingNative 2013 Keynote
    Ricepig
        8
    Ricepig  
       Oct 25, 2013 via iPhone
    @dorentus 这个代码多初始化了一个A对象

    A a;
    A b=a;

    或者

    A b(a)
    jiangtao92
        9
    jiangtao92  
       Oct 27, 2013
    如果你要表达的是复制构造函数的话,至少是应该这样 A(const A & copy)

    为什么是 A(const A & copy) 而不是 A(const A copy)

    c++ 的复制构造函数 在实参传到形参(非引用类型)的时候 会被隐式的调用 比如:
    A a1;
    A a2(a1);// 如果你是A(const A copy) 就是无限的递归调用

    A(const A & copy) 因为是引用类型,不会隐式的调用复制构造函数.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5153 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 08:33 · PVG 16:33 · LAX 01:33 · JFK 04:33
    ♥ Do have faith in what you're doing.