visual标准c++中是否存在safe_cast
visual Is there safe_cast in the standard c++?
在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
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++Cast运算符过载
- C++长双大"safe"整数
- 有没有"safe" static_cast选择?
- 如何以" Safe "的方式获取 C++ 中的当前时间
- "thread-safe data"与"thread-safe code/functions"的区别
- 错误:"cast"未命名类型void setCastDescription(std::string
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- C++:"Expected '(' for function-style cast or type construction"错误
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- Gtk+ g_signal_connect() 和 C++ lambda 会导致"invalid cast"错误
- Shared_ptr cast vs static_cast speed
- 是否有C++准则将第一个枚举设置为"safe"默认值?
- "Safe"将元素添加到 std::vector 的方法,超出了其 size() 但低于其容量 ()
- 在 iOS 上使用 Aruco 构建 OpenCV 时"Functional-style cast from id to double is not allowed"
- 覆盖 CAST 运算符(我认为它被称为向下转换)
- C++错误,隐 <function-style-cast> 式要求使用模板化类一次调用多个构造函数的多个转换
- 如何修复<function-style-cast>错误:无法从'initializer list'转换为asdending比较<W>(模板函子)
- 有没有一种"safe"方法来声明 lippincott 函数,这样它就不会在捕获之外被调用?