Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 需要时常量动态\u指针\u强制转换_C++_C++17 - Fatal编程技术网

C++ 需要时常量动态\u指针\u强制转换

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()

我不清楚什么时候需要使用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() = 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
将起作用