gpt4 book ai didi

c++ - 构造函数困惑

转载 作者:可可西里 更新时间:2023-11-01 17:03:50 26 4
gpt4 key购买 nike

我一直认为我对 C++ 非常了解,但有时即使是最基本的东西我也会感到惊讶。

在以下场景中,我对为什么调用构造函数 Derived::Derived(const Base&) 感到困惑:

class Base
{ };

class Derived : public Base
{
public:

Derived() { }

Derived(const Base& b)
{
std::cout << "Called Derived::Derived(const Base& b)" << std::endl;
}
};

int main()
{
Derived d;
Base b;
d = b;
}

输出:Called Derived::Derived(const Base& b),表示调用了Derived中的第二个构造函数。现在,我认为我非常了解 C++,但我不明白为什么会调用该构造函数。我理解整个“四规则”概念,我认为表达式 d = b 会做两件事之一:要么 1) 调用隐式(编译器生成的)赋值运算符Base,或 2) 触发编译器错误,提示函数 Derived& operator = (const Base&) 不存在。

相反,它调用了一个构造函数,即使表达式 d = b 是一个赋值表达式。

那么为什么会这样呢?

最佳答案

d = b 可能发生,因为 b 被转换为 Derived。第二个构造函数用于自动类型转换。就像 d = (Derived) b

Derived是一个Base,但Base不是Derived,所以赋值前必须先转换。

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

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