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

时间:2016-04-02 06:00:51

标签: c++

我在C ++中学习static_cast<Type>(object)。我发现它使用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();
}

非常感谢。

1 个答案:

答案 0 :(得分:1)

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

然而,正如评论中所指出的,static_cast<Type>(object)产生了一个类型为Type的新对象 - 并且由于创建了一个新对象,因此调用了相应的构造函数,其中包含复制对象的部分不包含在Type对象中(切片)。