c++ - dynamic_cast 派生模板到较少的 cv 限定指针

标签 c++ c++11

我有以下代码:

struct Base
{
    virtual ~Base(){};
};

template<class T>
struct Derived : public Base
{};

int main()
{
    Derived<int> d;
    Base *pD = &d;

    if(dynamic_cast<Derived<const int>*>(pD))
    {
        std::cout << "const" << std::endl;
    }

    if(dynamic_cast<Derived<int>*>(pD))
    {
        std::cout << "non-const" << std::endl;
    }
}

我希望两个 dynamic_casts 都返回一个有效的指针,因为新类型的 cv 限定较少。谁能向我解释我错过了什么?有什么方法可以识别 Derived<XYZ>忽略给定 Base 的 cv 限定符指针?

最佳答案

从编译器的角度来看,Derived<int>Derived<const int>相距const char*struct MyBox .换句话说,他们之间没有任何关系。

关于c++ - dynamic_cast 派生模板到较少的 cv 限定指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36849950/

相关文章:

c++ - std::map operator[] 的一致性

c++ - 为什么在分配器中允许 `propagate_on_container_swap == false`,因为它可能导致未定义的行为?

c++ - 需要帮助让英特尔 TBB 正常工作吗?

c++ - C++11 上的嵌套类成员访问

c++ - 从专门的方法中捕获异常

c++ - 在 Rcpp 中,为什么我不能将一个子集 vector 分配给另一个子集 vector

c++ - 迭代 C++ list<derived> 作为基类

c++ - 无法从文件中读取

c++ - 设置内核参数时的 CL_INVALID_ARG_SIZE

c++ - BGL : bundled object without a default constructor?