我在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();
}
非常感谢。
答案 0 :(得分:1)
听起来你期望static_cast
像指针一样工作,但你的代码中没有指针转换。 static_cast<Type *>(&object)
会产生一个指向Type
的指针,取消引用它确实会让您将object
视为Type
类型(我认为这就是你的意思)说“改变如何使用对象指向的内存”)。这是可能的,因为object
仍然以其原始形式存在于内存中的某个位置,并且指针实际上只提供对object
数据和行为的一部分的访问。
然而,正如评论中所指出的,static_cast<Type>(object)
产生了一个类型为Type
的新对象 - 并且由于创建了一个新对象,因此调用了相应的构造函数,其中包含复制对象的部分不包含在Type
对象中(切片)。