C++ 需要时常量动态\u指针\u强制转换
我不清楚什么时候需要使用dynamic\u pointer\u cast或dynamic\u cast with const。请有人给我解释一下。我创建了一个类型为a的const对象,但就我所见,没有必要在const at downcast中使用动态指针转换,那么什么时候需要const downcast呢C++ 需要时常量动态\u指针\u强制转换,c++,c++17,C++,C++17,我不清楚什么时候需要使用dynamic\u pointer\u cast或dynamic\u cast with const。请有人给我解释一下。我创建了一个类型为a的const对象,但就我所见,没有必要在const at downcast中使用动态指针转换,那么什么时候需要const downcast呢 #include <iostream> #include <memory> struct A { int x = 10; virtual ~A()
#include <iostream>
#include <memory>
struct A {
int x = 10;
virtual ~A() = default;
};
struct B :public A {
int y = 11;
};
int main()
{
const std::shared_ptr<A> a = std::make_shared<B>();
auto b = std::dynamic_pointer_cast<B>(a); //why shouldn't be dynamic_pointer_cast<const B>(a);
b->y;
return 0;
}
#包括
#包括
结构A{
int x=10;
virtual~A()=默认值;
};
结构B:公共A{
int y=11;
};
int main()
{
const std::shared_ptr a=std::make_shared();
auto b=std::dynamic_pointer_cast(a);//为什么不应该是dynamic_pointer_cast(a);
b->y;
返回0;
}
谢谢。指针的常数与指针指向的常数无关 如果
a
是指向常量a的指针:
std::shared_ptr<const A> a = std::make_shared<const B>();
// or
const std::shared_ptr<const A> a = std::make_shared<const B>();
std::shared_ptr a=std::make_shared();
//或
const std::shared_ptr a=std::make_shared();
,则dynamic\u pointer\u cast
将不起作用,但dynamic\u pointer\u cast
将起作用