为什么<Type>static_cast(对象)将对象复制到类型?

Why static_cast<Type>(object) copies object to Type?

本文关键字:对象 复制 类型 cast Type lt gt static 为什么      更新时间:2023-10-16

我正在C++中学习static_cast<Type>(object)。我发现它用object调用Type的复制构造函数。是真的吗?如果它是真的,为什么要复制它?我以为它只是改变了如何使用对象指向的内存。如果需要构建副本,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对象中未包含的复制对象部分被丢弃(切片)。