c++ - 奇怪的构造函数行为

标签 c++ constructor copy-constructor

#include <iostream>
using namespace std;

class Foo
{
public:
    Foo()
    {
        cout << 0;
    }
    Foo(Foo &f)
    {
        cout << 1;
    }
};

void someFunction(Foo f) {};

int main()
{
    Foo f1;           //displays 0 (as expected)
    Foo f2(f1);       //displays 1 (as expected)
    someFunction(f1); //displays 1 (why?)
    someFunction(f2); //displays 1 (why?)

    return 0;
}

我不明白为什么函数“someFunction”调用第二个构造函数。我认为它只会调用第一个构造函数,不带参数,并显示 0。

也许我遗漏了一些明显的东西......

最佳答案

第二个构造函数是复制构造函数,当您按值将参数传递给函数时,它会被复制,从而调用复制构造函数。

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

关于c++ - 奇怪的构造函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37900187/

相关文章:

c++ - 为什么转换构造函数在这里被调用

c++ - 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告吗?

c++ - 在用户定义的复制构造函数中使用隐式复制构造函数

c++ - 检查是否调用了复制构造函数

java - Android 版 OpenCV : Error Program "sh" not found in PATH

c++ - 模板类声明 - 不是常量表达式

c++ - 非常量引用的初始值必须是左值

c++ - c++ 中的默认复制构造函数是线程安全的吗?

c++ - 如何从 Lua 函数中获取多个返回表?

c++ - 函数指针