奇怪的构造函数行为

时间:2016-06-18 18:15:33

标签: c++ constructor copy-constructor

// (A)

我不明白为什么功能' someFunction'调用第二个构造函数。我以为它只会调用第一个构造函数,没有参数,并显示0。

也许我错过了一些明显的东西......

3 个答案:

答案 0 :(得分:8)

第二个构造函数是 copy 构造函数,当你通过值将参数传递给函数时,它是复制的,它会调用复制构造函数。

第一个构造函数(默认构造函数)仅在从头开始创建对象时调用,并且没有任何参数。

答案 1 :(得分:2)

因为当您调用 someFunction 时,编译器会调用copy-constructor将对象f1f2复制到f

为避免这种情况,只需使用 Foo 对象的引用参数声明该函数,如下所示:

int someFunction(Foo &f) {}

然后像往常一样打电话:

someFunction(f1);

答案 2 :(得分:1)

它永远不会调用默认构造函数,因为你只是复制foo对象。它将使用复制构造函数,如果没有可用的复制构造函数,则使用与此类似的第二个构造函数。