我听说reinterpret_cast是实现定义的,但我不知道这真正意味着什么。你能提供一个例子说明它是如何出错的,它出错了,使用C-Stylecast更好吗? 最佳答案 C风格的类型转换并不好。它只是按顺序尝试各种C++风格的强制转换,直到找到一个可行的。这意味着当它像reinterpret_cast一样工作时,它与reinterpret_cast有完全相同的问题。但除此之外,它还有这些问题:它可以做很多不同的事情,并且从阅读代码中并不总是清楚将调用哪种类型的转换(它的行为可能类似于reinterpret_cast、const_c
当可以从实际存储的类型隐式转换到请求的类型时,为什么std::any_cast会抛出std::bad_any_cast异常?例如:std::anya=10;//holdsanintnowautob=std::any_cast(a);//throwsbad_any_castexception为什么不允许这样做,是否有允许隐式转换的解决方法(以防std::any持有的确切类型未知)? 最佳答案 std::any_cast是根据typeid指定的。报价cppreference对此:Throwsstd::bad_any_castifthet
当可以从实际存储的类型隐式转换到请求的类型时,为什么std::any_cast会抛出std::bad_any_cast异常?例如:std::anya=10;//holdsanintnowautob=std::any_cast(a);//throwsbad_any_castexception为什么不允许这样做,是否有允许隐式转换的解决方法(以防std::any持有的确切类型未知)? 最佳答案 std::any_cast是根据typeid指定的。报价cppreference对此:Throwsstd::bad_any_castifthet
我很清楚使用static_cast而不是C风格的指针类型转换的优势。如果指针类型不兼容,则:static_cast将在源代码中的特定行产生编译时错误C风格的转换可能会在程序执行的“随机”点导致运行时错误但我找不到任何非指针类型的类似示例。换句话说,两种转换方法对非指针类型产生相同的结果。这是正确的,还是我错过了什么?如果是,static_cast是否仅用于非指针类型以保持编码一致性? 最佳答案 其他两个答案尚未提及的一个优点是static_cast更容易发现。众所周知,括号的含义在C++中被重载,并且很难发现邪恶的(甚至不正确的)强
我很清楚使用static_cast而不是C风格的指针类型转换的优势。如果指针类型不兼容,则:static_cast将在源代码中的特定行产生编译时错误C风格的转换可能会在程序执行的“随机”点导致运行时错误但我找不到任何非指针类型的类似示例。换句话说,两种转换方法对非指针类型产生相同的结果。这是正确的,还是我错过了什么?如果是,static_cast是否仅用于非指针类型以保持编码一致性? 最佳答案 其他两个答案尚未提及的一个优点是static_cast更容易发现。众所周知,括号的含义在C++中被重载,并且很难发现邪恶的(甚至不正确的)强
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Whenshouldstatic_cast,dynamic_castandreinterpret_castbeused?有了这个C++代码,char*a=(char*)b;我收到警告警告:使用旧式类型转换。新风格的Actor阵容是什么? 最佳答案 reinterpret_cast、static_cast、dynamic_cast和const_cast是c++cast的替代方案。const_cast从const变量中移除const/volatile。dyna
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Whenshouldstatic_cast,dynamic_castandreinterpret_castbeused?有了这个C++代码,char*a=(char*)b;我收到警告警告:使用旧式类型转换。新风格的Actor阵容是什么? 最佳答案 reinterpret_cast、static_cast、dynamic_cast和const_cast是c++cast的替代方案。const_cast从const变量中移除const/volatile。dyna
我的编译器是最新的VC++2013RC。voidf(){intn1=0;intn2=reinterpret_cast(n1);//errorC2440}errorC2440:'reinterpret_cast':cannotconvertfrom'int'to'int'为什么reinterpret_cast不能用在这么明显的情况下? 最佳答案 According对于cppreference.com,以下转换仅在C++11之后可用:Anexpressionofintegral,enumeration,pointer,orpointer
我的编译器是最新的VC++2013RC。voidf(){intn1=0;intn2=reinterpret_cast(n1);//errorC2440}errorC2440:'reinterpret_cast':cannotconvertfrom'int'to'int'为什么reinterpret_cast不能用在这么明显的情况下? 最佳答案 According对于cppreference.com,以下转换仅在C++11之后可用:Anexpressionofintegral,enumeration,pointer,orpointer
static_cast和reinterpret_cast似乎都可以很好地将void*转换为另一种指针类型。是否有充分的理由偏爱其中一个? 最佳答案 使用static_cast:它是准确描述此处进行的转换的最窄类型。有一种误解,认为使用reinterpret_cast会更好,因为这意味着“完全忽略类型安全,只是从A转换为B”。但是,这实际上并没有描述reinterpret_cast的效果。相反,reinterpret_cast有多种含义,所有含义都认为“reinterpret_cast执行的映射是实现定义的”。[5.2.10.3]但在