gpt4 book ai didi

c++ - 为什么只有 static_cast 能够返回请求类型的新对象?

转载 作者:行者123 更新时间:2023-12-05 01:26:12 24 4
gpt4 key购买 nike

在static_cast、dynamic_cast、reinterpret_cast 和const_cast 中,只有static_cast 能够返回所需类型的对象,而其他类型只能返回指针或对表示的引用。为什么会这样?

例子:

int y = 3;
double z = reinterpret_cast<double> (y);//error
double z = reinterpret_cast<double&> (y);//ok
double z = static_cast<double> (y);//but this is ok!!!

const int y = 3;
int z = const_cast<int> (y);//error
int z = const_cast<int&> (y);//ok

对于 dynamic_cast:

using namespace std;

class Gun
{
public:
virtual void shoot(){
cout << "BANG!\n";
}
};

class MachineGun : public Gun{
public:
void shoot() override{
cout <<"3X-BANG\n";
}
};

int main()
{
Gun gun;
MachineGun tt;
Gun* gunp = &gun;
Gun* gunp1 = &tt;

Gun* newGun = dynamic_cast<Gun*>(gunp1);//ok
Gun newGun1 = dynamic_cast<Gun>(tt);//error
}

最佳答案

Only static_cast is able to return an object of desirable type

这是不正确的。当转换目标是对象类型时,所有转换都会返回一个对象。

也就是说:

  • const_cast 目标只能是引用、指向对象的指针或指向成员的指针。这是因为其他类型不是复合类型,其“内部”类型的 cv 限定符可以修改。
  • dynamic_cast 目标只能是对象的引用或指针。没有间接就不能拥有多态性。引用和指针是 C++ 中存在的间接形式。

关于c++ - 为什么只有 static_cast 能够返回请求类型的新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70402974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com