gpt4 book ai didi

c++ - 使用转换构造函数隐式需要复制构造函数

转载 作者:行者123 更新时间:2023-11-28 01:02:37 25 4
gpt4 key购买 nike

我正在学习 C++,我遇到了一些奇怪的事情,我无法在我的 C++ 书籍或 Web 上找到任何相关信息。下面的代码只是对转换构造函数的测试:Test(int)。 testFunction 在需要 Test 对象的地方获取一个 int,转换构造函数用于创建一个 Test 对象以发送给该函数。这按预期工作。

#include <iostream>
using namespace std;

class subClass {
public:
subClass(int);
subClass(subClass&);
};

subClass::subClass(int i) {};
subClass::subClass(subClass& i) {};

class Test {
public:
Test(const Test&);
Test(int);
subClass sub;
};

Test::Test(const Test &)
: sub(1) {};

Test::Test(int in)
: sub(1) {};

void testFunction(Test in) {
cout << "testfunction\n";
};

int main () {

testFunction(4);
}

但是,如果我从 Test 类中删除复制构造函数 Test(const Test&),我会收到如下所示的错误消息。但是复制构造函数从未被使用过,那么为什么需要它呢?

example.cpp: In function `int main()':
example.cpp:32: error: no matching function for call to `Test::Test(Test)'
example.cpp:13: note: candidates are: Test::Test(Test&)
example.cpp:24: note: Test::Test(int)
example.cpp:32: error: initializing argument 1 of `void testFunction(Test)' from result of `Test::Test(int)'

附加信息:我注意到,无论是从子类中删除复制构造函数,还是通过引用将参数传递给 testFunction,都可以在没有 Test 复制构造函数的情况下编译函数。我在 cygwin 中使用 gnu g++ 编译器。

最佳答案

因为:

void testFunction(Test in)

您正在按调用复制构造函数的值传递 Test 对象。

关于c++ - 使用转换构造函数隐式需要复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7989506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com