如果我不使用指针,会有什么区别? 我在YouTube上看视频,如何在C++中进行注解? 由于这是静态转换,我只想知道如果我不使用指针会发生什么 class Base{}; class Derived1: public Base {}; class Derived2: public Base{}; int main(){ Derived d1; Derived d2; Base *bp1=static_cast<Base*>(&d1); Base *bp2=static_cast<Base*>(&d2); Derived *d1p=static_cast<Derived1*>(bh2); Derived *d2p=static_cast<Derived2*>(bp1); return 0; } 类基{}; 类Derived1:公共基{}; 类Derived2:公共基{}; int main(){ 衍生d1; 衍生d2; 基础*bp1=静态铸件(&d1); 基础*bp2=静态施法(&d2); 导出*d1p=静态_铸造(bh2); 导出*d2p=静态_转换(bp1); 返回0; }

如果我不使用指针,会有什么区别? 我在YouTube上看视频,如何在C++中进行注解? 由于这是静态转换,我只想知道如果我不使用指针会发生什么 class Base{}; class Derived1: public Base {}; class Derived2: public Base{}; int main(){ Derived d1; Derived d2; Base *bp1=static_cast<Base*>(&d1); Base *bp2=static_cast<Base*>(&d2); Derived *d1p=static_cast<Derived1*>(bh2); Derived *d2p=static_cast<Derived2*>(bp1); return 0; } 类基{}; 类Derived1:公共基{}; 类Derived2:公共基{}; int main(){ 衍生d1; 衍生d2; 基础*bp1=静态铸件(&d1); 基础*bp2=静态施法(&d2); 导出*d1p=静态_铸造(bh2); 导出*d2p=静态_转换(bp1); 返回0; },c++,C++,例如: Base bp1=static_cast<Base*>(d1); Base bp1=静态(d1); PS:如果这个问题没有任何意义,我很抱歉。强制转换指针(或引用)对底层对象没有任何作用,它只是改变了您在给定地址(通过强制转换指针时)对某些内容的看法。如果强制转换无效,您的代码当然会有未定义的行为 如果没有指针,实际上是在修改对象 Derived d1; Base b = d1; // makes a copy of just the "Base" part of

例如:

    Base bp1=static_cast<Base*>(d1);
Base bp1=静态(d1);
PS:如果这个问题没有任何意义,我很抱歉。

强制转换指针(或引用)对底层对象没有任何作用,它只是改变了您在给定地址(通过强制转换指针时)对某些内容的看法。如果强制转换无效,您的代码当然会有未定义的行为

如果没有指针,实际上是在修改对象

Derived d1;
Base b = d1; // makes a copy of just the "Base" part of d1
上面这张照片还可以,不需要石膏,但它不是d1看起来像底座的视图。它是d1基本部分的切片副本。“b”是一个不相关的对象,仅由d初始化。这就是为什么它被称为“切片”

将对象强制转换为指针是不合理的,除非您的类具有该类型的转换运算符,尽管这通常是一种糟糕的设计:

struct Derived : Base {   
    explicit operator Base*() { return this; } // don't really do this, but it compiles
};

给定这样一个奇怪的转换运算符,您的cast将工作,并将调用派生的::运算符Base*。因为它是显式的,所以您需要强制转换,否则转换(通常)不会发生。总的来说,我认为你应该把这看作是不匹配的概念。指针不是对象;他们指的是他们。做一些模糊的事情会让你的程序很难推理。

d1
无法转换为
Base*
,你的代码根本无法编译。也许你的意思是
static\u cast
,在这种情况下,cast是隐式的,不会添加任何内容。好吧!你所说的“不可能转换为基*”是什么意思?就是这样。试图从
派生的
对象转换为
基*
指针没有意义,语言也不支持它。如果你想要一个指向
d1
Base*
指针,你必须获取它的地址,那么得到的
Derived*
指针可以转换成
Base*
试试。。。。。。。