gpt4 book ai didi

c++ - 为什么 static_cast(object) 将对象复制到 Type?

转载 作者:行者123 更新时间:2023-11-28 05:45:09 24 4
gpt4 key购买 nike

我在学习static_cast<Type>(object)在 C++ 中。我发现它调用了 Type 的复制构造函数与 object .是真的吗?如果是真的,为什么要复制它?我认为它只是改变了如何使用对象指向的内存。如果需要构建拷贝,static_cast成本比我想象的要高。我需要关心费用吗?

下面是测试代码,

#include <iostream>

class Base {
public:
Base() {};
Base(const Base& org) {
std::cout << "Base Copy Constructor" << std::endl;
};
virtual ~Base() {};
};

class Derived : public Base {
public:
void static_casting(void) {
static_cast<Base>(*this);
}
};

void test_static_cast_copy_constructor(void) {
Derived a;
a.static_casting();
}

非常感谢。

最佳答案

听起来您在期待 static_cast像使用指针一样工作,但是您的代码中没有发生指针转换。 static_cast<Type *>(&object)会产生指向 Type 的指针,并取消引用它确实会让你对待 object好像它是 Type 类型的(我假设这就是您说“更改如何使用对象指向的内存”时的意思)。这是可能的,因为 object仍然以其原始形式存在于内存中的某处,有效的指针仅提供对 object 的一部分的访问。的数据和行为。

但是,正如评论中指出的那样,static_cast<Type>(object)产生一个类型为 Type 的新对象- 由于创建了一个新对象,因此调用了适当的构造函数,复制对象的部分不包含在 Type 中对象被扔掉(切片)。

关于c++ - 为什么 static_cast<Type>(object) 将对象复制到 Type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369780/

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