gpt4 book ai didi

c++ - 值(value)转换与引用转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:47 25 4
gpt4 key购买 nike

值转换引用转换有什么区别?为什么其中一个调用转换(又名创建新对象)而另一个不调用?在 rhs 上使用转换有哪些注意事项?

假设 thisDerived 。为什么那些实际上不会转换到 Base

*this = (Base&) rhs
(Base)* this = rhs

你能用简单的例子展示一下吗?

最佳答案

值转换从现有值创建新值;引用转换创建对相同现有值的新引用。

引用转换既不会改变现有对象的内容,也不会创建新对象;它仅限于更改对已经存在的值的解释。另一方面,值转换可以从现有对象创建新对象,因此限制较少。

例如,如果您有一个 unsigned char 并且您想要一个类型为 int 的值或引用,值转换将起作用,而引用转换将起作用失败:

unsigned char orig = 'x';
int v(orig); // Works
int &r(orig); // Does not work

rhs is Derived, I want to assign all inherited and non-inherited stuff from rhs into Base

然后您需要将两边都强制转换为 Base,或者向 Derived 添加一个赋值运算符,以 const Base& 作为参数。下面是一个双向转换的例子(其他程序员阅读你的代码可能很难理解)

struct Base {
int x;
Base(int x) : x(x) {}
};
struct Derived1 : public Base {
Derived1(int x) : Base(x) {}
};
struct Derived2 : public Base {
Derived2(int x) : Base(x) {}
};

运行下面的代码

Derived1 d1(5);
Derived2 d2(10);
cout << d1.x << " " << d2.x << endl;
((Base&)d1) = (Base&)d2;
cout << d1.x << " " << d2.x << endl;

产生以下打印输出:

5 10
10 10

如你所见,赋值((Base&)d1) = (Base&)d2复制了d2Base的内容部分到 d1Base 部分 ( demo )。

关于c++ - 值(value)转换与引用转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50202146/

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