gpt4 book ai didi

C++ 定义到基类的转换

转载 作者:行者123 更新时间:2023-11-30 01:53:57 25 4
gpt4 key购买 nike

我很难为基类定义和使用转换运算符。请考虑以下事项:

class base 
{
public:
base(const base&);
base& operator=(const base&);
//some stuff
};
class child : public base
{
public:
operator base() const;
//some more stuff
};

int main()
{
child c;
base b=c;
b=c;
}

如果我尝试将子项转换为基数,则永远不会调用 operator base()(即使我进行了显式转换)。相反,直接调用基类的复制构造函数或赋值运算符,而不进行转换。

child 被分配(或复制构造)到 base 时,如何调用 operator base()

最佳答案

基类的转换函数在语法上是合法的,但永远不会被调用。来自标准草案 n3337:

12.3.2 Conversion functions [class.conv.fct] §1

[...] A conversion function is never used to convert a (possibly cv-qualified) object to the (possibly cv-qualified) same object type (or a reference to it), to a (possibly cv-qualified) base class of that type (or a reference to it), or to (possibly cv-qualified) void. [...]

该语言具有不同的从派生到基础的转换机制。了解 object slicing .简而言之 - 它会自动为您完成。

关于C++ 定义到基类的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566388/

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