为什么<Type>static_cast(对象)将对象复制到类型?
Why static_cast<Type>(object) copies object to Type?
我正在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
对象中未包含的复制对象部分被丢弃(切片)。
相关文章:
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 如何在向量列表初始化时避免对象复制以及如何延长临时的生存期
- 了解在 C++ 中分配容器时的对象复制
- C++类对象复制构造函数和运算符=
- 复制 elision/RVO 会导致从同一对象复制/移动吗?
- 如何在循环内将大对象复制到omp任务中?
- 为什么当我添加一个不同的对象(复制构造函数中的参数)时调用复制构造函数?
- 无法将类构造函数中新创建的对象复制到 C++ 中的向量成员
- 将C++对象复制到指向新指针的指针处
- 将一个 OpenCV OutputArrayOfArrays 对象复制到另一个对象
- 选择性地禁用隐式对象复制
- 不能从文件到指针向量的对象复制
- 从派生对象复制构造
- OpenCV Mat对象复制速度更快
- 将子对象复制到父对象
- 为什么普通的 c++ 编译器不优化对象复制?
- C :将一个对象复制到构造函数中的另一个对象
- 使用命名对象复制构造函数
- 不必要的对象复制 - C++ STL
- 如何将一个类的对象复制到另一个类中