这个问题在这里已经有了答案:关闭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]但在
static_cast和reinterpret_cast似乎都可以很好地将void*转换为另一种指针类型。是否有充分的理由偏爱其中一个? 最佳答案 使用static_cast:它是准确描述此处进行的转换的最窄类型。有一种误解,认为使用reinterpret_cast会更好,因为这意味着“完全忽略类型安全,只是从A转换为B”。但是,这实际上并没有描述reinterpret_cast的效果。相反,reinterpret_cast有多种含义,所有含义都认为“reinterpret_cast执行的映射是实现定义的”。[5.2.10.3]但在
一般来说,使用const_cast()通常被认为是一种不好的做法。在C++代码中,因为它(大多数时候)揭示了设计中的缺陷。虽然我完全同意这一点,但我想知道使用const_cast()的案例是什么?是ok和唯一的解决方案。你们能不能给我一些你知道/遇到的例子?非常感谢。 最佳答案 它几乎被设计为仅与不正确const的遗留API一起使用,即使用您无法更改的函数,该函数具有非const接口(interface),但实际上不会改变接口(interface)上的任何内容 关于c++-const_c
一般来说,使用const_cast()通常被认为是一种不好的做法。在C++代码中,因为它(大多数时候)揭示了设计中的缺陷。虽然我完全同意这一点,但我想知道使用const_cast()的案例是什么?是ok和唯一的解决方案。你们能不能给我一些你知道/遇到的例子?非常感谢。 最佳答案 它几乎被设计为仅与不正确const的遗留API一起使用,即使用您无法更改的函数,该函数具有非const接口(interface),但实际上不会改变接口(interface)上的任何内容 关于c++-const_c
考虑以下代码:structBase{};structDerived:publicvirtualBase{};voidf(){Base*b=newDerived;Derived*d=static_cast(b);}这是标准禁止的([n3290:5.2.9/2])所以代码无法编译,因为Derived虚拟继承自Base。从继承中删除virtual使代码有效。此规则存在的技术原因是什么? 最佳答案 技术问题是无法解决Base*Base开头之间的偏移量是多少子对象和Derived的开始目的。在您的示例中,它看起来没问题,因为只看到一个带有Ba
考虑以下代码:structBase{};structDerived:publicvirtualBase{};voidf(){Base*b=newDerived;Derived*d=static_cast(b);}这是标准禁止的([n3290:5.2.9/2])所以代码无法编译,因为Derived虚拟继承自Base。从继承中删除virtual使代码有效。此规则存在的技术原因是什么? 最佳答案 技术问题是无法解决Base*Base开头之间的偏移量是多少子对象和Derived的开始目的。在您的示例中,它看起来没问题,因为只看到一个带有Ba