草庐IT

reinterpret-cast

全部标签

c++ - 将结构别名为其第一个成员是否是严格的别名违规?

示例代码:structS{intx;};intfunc(){Ss{2};return(int&)s;//Equivalentto*reinterpret_cast(&s)}我认为这是常见的,并且被认为是可以接受的。该标准确实保证结构中没有初始填充。但是这种情况并没有在严格的别名规则(C++17[basic.lval]/11)中列出:Ifaprogramattemptstoaccessthestoredvalueofanobjectthroughaglvalueofotherthanoneofthefollowingtypesthebehaviorisundefined:(11.1)th

c++ - 使用 constexpr 绕过重新解释强制转换限制

在c++11中,constexpr表达式不能包含重新解释转换。例如,如果想操作float中的位,比如说找到数字的尾数:constexprunsignedintmantissa(floatx){return((*(unsignedint*)&x>9);};上面的代码不能是constexpr。理论上,我看不出在这种或类似情况下的重新解释与算术运算符有何不同,但编译器(和标准)不允许这样做。有什么巧妙的方法可以绕过这个限制吗? 最佳答案 Ican'tseehowareinterpretcastinthisorsimilarcasescan

c++ - 使用 constexpr 绕过重新解释强制转换限制

在c++11中,constexpr表达式不能包含重新解释转换。例如,如果想操作float中的位,比如说找到数字的尾数:constexprunsignedintmantissa(floatx){return((*(unsignedint*)&x>9);};上面的代码不能是constexpr。理论上,我看不出在这种或类似情况下的重新解释与算术运算符有何不同,但编译器(和标准)不允许这样做。有什么巧妙的方法可以绕过这个限制吗? 最佳答案 Ican'tseehowareinterpretcastinthisorsimilarcasescan

c++ - 禁用 RTTI 的 dynamic_cast

我很想知道在禁用RTTI的情况下使用动态转换编译代码时会发生什么(在GCC上使用-fno-rtti或在VisualStudio上使用/GR-)。编译器是否“回退”到static_cast?由于(至少在VS上)它只会发出警告,所以编译后的代码会做什么?更具体地说,如果我在没有RTTI的情况下编译我确信dynamic_cast不会出错的代码(即dynamic_cast可以安全地替换为static_cast)喜欢这个:classA{/*...*/};classB:publicA{intfoo(){return42;}};//...A*myA=newB();intbar=(dynamic_ca

c++ - 禁用 RTTI 的 dynamic_cast

我很想知道在禁用RTTI的情况下使用动态转换编译代码时会发生什么(在GCC上使用-fno-rtti或在VisualStudio上使用/GR-)。编译器是否“回退”到static_cast?由于(至少在VS上)它只会发出警告,所以编译后的代码会做什么?更具体地说,如果我在没有RTTI的情况下编译我确信dynamic_cast不会出错的代码(即dynamic_cast可以安全地替换为static_cast)喜欢这个:classA{/*...*/};classB:publicA{intfoo(){return42;}};//...A*myA=newB();intbar=(dynamic_ca

c++ - 为什么使用 std::forward<T> 而不是 static_cast<T&&>

当给出以下结构的代码时templatevoidfoo(Args&&...args){...}我经常看到库代码使用static_cast在用于参数转发的函数中。通常,这样做的理由是使用static_cast避免不必要的模板实例化。给定语言的引用折叠和模板推导规则。我们通过static_cast获得完美的转发,此声明的证明如下(在误差范围内,我希望答案能启发)当给定右值引用时(或为了完整性-没有像thisexample中的引用限定),这会折叠引用,结果是一个右值。使用的规则是&&&&->&&(规则1以上)当给定左值引用时,这会折叠引用以使结果是左值。这里使用的规则是&&&->&(规则2以上

c++ - 为什么使用 std::forward<T> 而不是 static_cast<T&&>

当给出以下结构的代码时templatevoidfoo(Args&&...args){...}我经常看到库代码使用static_cast在用于参数转发的函数中。通常,这样做的理由是使用static_cast避免不必要的模板实例化。给定语言的引用折叠和模板推导规则。我们通过static_cast获得完美的转发,此声明的证明如下(在误差范围内,我希望答案能启发)当给定右值引用时(或为了完整性-没有像thisexample中的引用限定),这会折叠引用,结果是一个右值。使用的规则是&&&&->&&(规则1以上)当给定左值引用时,这会折叠引用以使结果是左值。这里使用的规则是&&&->&(规则2以上

Jackson: java.util.LinkedHashMap cannot be cast to X

本文翻译自:https://www.baeldung.com/jackson-linkedhashmap-cannot-be-cast1.概述:Jackson是一个广泛使用的Java库,它允许我们方便地序列化/反序列化JSON或XML。有时,当我们尝试将JSON或XML反序列化为对象集合时,可能会遇到“ java.lang.ClassCastException:java.util.LinkedHashMapcannotbecasttoX”。在本教程中,我们将讨论为什么会发生上述异常以及如何解决该问题。2.理解问题让我们创建一个简单的Java应用程序来重现此异常,以了解异常何时发生。2.1 创建

为什么C ++编译器不从最后一类优化此Dynamic_cast?

考虑此类层次结构:structAnimal{virtual~Animal();};structCat:virtualAnimal{};structDogfinal:virtualAnimal{};我的理解是final上classDog确保没有人可以创建从Dog,这是必然的,这意味着没有人可以创建一个is-a的班级Dog和is-aCat同时。考虑这两个dynamic_castS:Dog*to_final(Cat*c){returndynamic_cast(c);}Cat*from_final(Dog*d){returndynamic_cast(d);}GCC,ICC和MSVC忽略final预选赛

java:如何修复 Unchecked cast 警告

我有以下代码:privateHashMap,HashMap>m_componentStores;publicTgetComponent(Entitye,ClassexampleClass){HashMapstore=m_componentStores.get(exampleClass);Tresult=(T)store.get(e);if(result==null){thrownewIllegalArgumentException("GETFAIL:"+e+"doesnotpossessComponentofclass\nmissing:"+exampleClass);}returnr