visual标准c++中是否存在safe_cast

visual Is there safe_cast in the standard c++?

本文关键字:safe cast 存在 是否 标准 c++ visual      更新时间:2023-10-16

在visual c++中似乎有一个safe_cast,它看起来类似于dynamic_cast。

我想知道safe_cast是否在标准c++中?

safe_cast在C++/CLI中使用。C++中没有这样的标准构造。

safe_cast不是标准的c++类型强制转换。仅提供4名铸造操作员

1.dynamic_cast <new_type> (expression)
2.reinterpret_cast <new_type> (expression)
3.static_cast <new_type> (expression)
4.const_cast <new_type> (expression)

我需要一个"安全"的演员阵容,并在boost::polymorphic_cast中找到了我想要的。当强制转换无效或尝试从nullptr强制转换时,它会引发异常。如果类型不是多态的(即没有虚拟成员),则会出现编译时错误。

#include <iostream>
#include <boostpolymorphic_cast.hpp>
class Base{
    public: virtual ~Base() = default;
};
class D1 : public Base{
    public: virtual ~D1() = default;
};
class D2 : public Base{
    public: virtual ~D2() = default;
};

int main(void)
{
    D1 d1;
    Base* b = &d1;
    Base* b2 = nullptr;
    std::cout << "n---Testing valid cast---n";
    std::cout << "cast from base to d1: " << boost::polymorphic_cast<D1*>(b) << "n";
    try {
        std::cout << "n---Testing invalid cast---n";
        std::cout << "base to d2: " << boost::polymorphic_cast<D2*>(b) << "n";
    }
    catch (...) {
        std::cout << "cast from based to d2 failedn";
    }
    try {
        std::cout << "n---Testing nullptr cast---n";
        std::cout << "null to d1: " << boost::polymorphic_cast<D1*>(b2) << "n";
    }
    catch (...) {
        std::cout << "cast from null to d1 failedn";
    }
}

给出输出:

---Testing valid cast---
cast from base to d1: 00AFFBD4
---Testing invalid cast---
cast from based to d2 failed
---Testing nullptr cast---
cast from null to d1 failed