草庐IT

dynamic_casting

全部标签

c++ - 在未对齐的内存上重新解释_cast

假设以下代码:structA{inta;intb;};char*buffer=receivedFromSomeWhere();Aa=*reinterpret_cast(buffer+1);如果buffer+0在int的大小上对齐,buffer+1很可能在未对齐的内存上。默认复制构造函数可能会愉快地复制两个未对齐的int成员a和b。在x86/x64架构上,除了减慢代码速度外,它是否会以任何讨厌的方式影响a的复制构造?我知道一个好的序列化可以解决未对齐的内存问题(通过在某处添加一个填充以使A结构在buffer中对齐),但就我而言,我不对这部分负责。 最佳答案

c++ - 当一个方法只接受 Foo *const 时,我应该 const_cast "this"吗?

我有一个类Foo这是一个self引用的树状结构(最低限度):classFoo{public://Getsthischild'spositionrelativetoit'sparent.intgetPosition()const{returnparent->indexOf(this);}intindexOf(constFoo*constchild)const{returnchildren.indexOf(child);//thislinecausesanerror.}private:Foo*parent;QListchildren;}行returnchildren.indexOf(chi

c++ - 转换函数是否返回 void "old-style-cast"?

Coverity提示我们代码库中的各种函数调用没有检查返回值。Uncheckedreturnvalue(CHECKED_RETURN)3.check_return:CallingAppendwithoutcheckingreturnvalue(asisdoneelsewhere73outof78times).在过去,我们会通过将返回值转换为void(如讨论的here)来简单地解决这个问题(在仔细检查返回值确实不重要之后):(void)Foo.Append(bar);但是,我们正朝着启用所有警告的方向努力,并且将警告视为错误,所以我有点担心上面的代码会生成一个old-style-cast

c++ - C++ Cast的实现

我正在浏览CodeProject中的一些代码,发现了以下用于C++转换的代码。templateunionhorrible_union{OutputClassout;InputClassin;};templateinlineOutputClasshorrible_cast(constInputClassinput){horrible_unionu;u.in=input;returnu.out;}为什么要按上面的方式实现cast。为什么我们不能只进行手动转换。有人可以举例说明正常类型转换何时不起作用吗? 最佳答案 尽管这种方法依赖于未定

C++11 move(x) 实际上意味着 static_cast<X&&>(x)?

这个问题在这里已经有了答案:Whenisthemoveconstructorcalledinthe`std::move()`function?(2个答案)关闭9年前。刚刚阅读了Stroustrup的C++编程语言第4版,在第7章中他说:move(x)meansstatic_cast(x)whereXisthetypeofx和Sincemove(x)doesnotmovex(itsimplyproducesanrvaluereferencetox)itwouldhavebeenbetterifmove()hadbeencalledrval()我的问题是,如果move()只是将变量转换为r

c++ - DECLARE_DYNAMIC 和 DECLARE_DYNCREATE 之间的区别?

你能告诉我DECLARE_DYNAMIC和DECLARE_DYNCREATE有什么区别吗?我们究竟可以在哪里使用它们? 最佳答案 第一个声明类具有运行时类型信息,第二个声明可以在运行时动态创建实例。这在MSDN文档中有详细描述-请参阅Run-TimeObjectModelServices等链接了解更多信息。 关于c++-DECLARE_DYNAMIC和DECLARE_DYNCREATE之间的区别?,我们在StackOverflow上找到一个类似的问题: htt

c++ - 禁用 "bad function cast"警告

我收到以下警告:warning:convertingfrom'void(MyClass::*)(byte)'to'void(*)(byte)'这是因为我需要将成员函数而不是普通函数作为参数传递。但是程序运行正常。我想禁用此警告(Wno-bad-function-cast不适用于C++)或实现一种不同的方式来传递成员函数。 最佳答案 否。请认真对待此警告。您应该更改代码来处理这种情况。指向成员函数的指针(void(MyClass::*)(byte))和普通函数指针(void(*)(byte))是完全不同的。Seethislink.你不

c++ - 奇怪的 static_cast 把戏?

在仔细阅读Qt源代码时,我遇到了这个gem:templateinlineTqgraphicsitem_cast(constQGraphicsItem*item){returnint(static_cast(0)->Type)==int(QGraphicsItem::Type)||(item&&int(static_cast(0)->Type)==item->type())?static_cast(item):0;}注意static_cast(0)->Type?我已经使用C++很多年了,但以前从未见过0在static_cast中使用过。这段代码在做什么,它安全吗?背景:如果您从QGrap

c++ - dynamic_cast 困惑

我放弃了这个...$5.2.7/2-"IfTisapointertype,vshallbeanrvalueofapointertocompleteclasstype,andtheresultisanrvalueoftypeT.IfTisareferencetype,vshallbeanlvalueofacompleteclasstype,andtheresultisanlvalueofthetypereferredtobyT."根据上述,下面的代码应该是合式的。structA{};structB:A{};intmain(){Bb;Aa,&ar1=b;B&rb1=dynamic_cast

c++ - HDF5 C++ 接口(interface) : writing dynamic 2D arrays

我正在使用HDF5C++API编写二维数组数据集文件。HDF集团有anexampletocreate来自静态定义数组大小的HDF5文件,我已对其进行修改以满足下面的需求。但是,我需要一个动态数组,其中NX和NY都是在运行时确定的。我找到了anothersolutiontocreate2Darraysusingthe"new"keyword帮助创建一个动态数组。这是我所拥有的:#include"StdAfx.h"#include"H5Cpp.h"usingnamespaceH5;constH5std_stringFILE_NAME("C:\\SDS.h5");constH5std_str