// (A)
我不明白为什么功能' someFunction'调用第二个构造函数。我以为它只会调用第一个构造函数,没有参数,并显示0。
也许我错过了一些明显的东西......
答案 0 :(得分:8)
第二个构造函数是 copy 构造函数,当你通过值将参数传递给函数时,它是复制的,它会调用复制构造函数。
第一个构造函数(默认构造函数)仅在从头开始创建对象时调用,并且没有任何参数。
答案 1 :(得分:2)
因为当您调用 someFunction 时,编译器会调用copy-constructor将对象f1
或f2
复制到f
。
为避免这种情况,只需使用 Foo 对象的引用参数声明该函数,如下所示:
int someFunction(Foo &f) {}
然后像往常一样打电话:
someFunction(f1);
答案 2 :(得分:1)
它永远不会调用默认构造函数,因为你只是复制foo对象。它将使用复制构造函数,如果没有可用的复制构造函数,则使用与此类似的第二个构造函数。