草庐IT

c++ - 智能指针 : cast between base and derived classes

假设你有这样一个函数:SmartPtrdoSomething(SmartPtra);像这样的类:classA{}classB:publicA{}现在我这样做:SmartPtrfoo=newB();doSomething(foo);现在,我想取回一个SmartPtr来自doSomething的对象.SmartPtrb=doSomething(foo);这可能吗?我需要做什么样的选角?现在,我刚发现一些我认为丑陋的东西:B*b=(B*)doSomething().get()重要说明:我无权访问SmartPtr和doSomething()代码。 最佳答案

c++ - 将 char 数组的最后 8 个字节设置为 __uint64

我正在通过维基百科上的伪代码实现SHA1算法。它说我应该将原始长度作为64位附加到消息中,所以我尝试了以下操作://new_messageisoftypechar[]andis9+byteslong*((__int64*)(new_message-8))=(__int64)length;这会导致new_message的内存损坏。有人能发现错误吗?谢谢!编辑:天哪,我太傻了。new_message指向我数组的开头,难怪它崩溃了! 最佳答案 new_message-8将从当前指针返回8个字节,这是意图吗?append意味着在末尾添加8个

c++ - 无法使用 BitScanForward64

我正在用C++构建一个使用位板(__int64s)的国际象棋引擎,我需要使用BitScanForward64才能进行一些计算。但是当我调用它时,我得到了这个错误:errorC3861:'_BitScanForward64':identifiernotfound我这样包含它:#include#pragmaintrinsic(_BitScanForward64)BitScanForward64也是一样。我在Windows7(64位)上使用VisualStudio11。CPU:英特尔酷睿i7-2600K我之前没有用C++做过很多项目,所以我不知道为什么会这样。请帮忙!

c++ - 将 vector<shared_ptr<Derived>> 传递给需要 vector<shared_ptr<Base>> 的函数

我使用的代码结构有问题,如下(简化):classSPoint{public:SPoint(doublex,doubley,doublez):_x(x),_y(y),_z(z){}protected:double_x,_y,_z;}classPoint3D:publicSPoint{public:Point3D(doublex,doubley,doublez):SPoint(x,y,z){//defaultvaluesforUandV}protected:doubleU,V;}这些点用于创建折线:classSPolyline{public:SPolyline(constvector>&p

c++ - mingw-w64 : slow sprintf in <cstdio>

是吗C++中的header包含与相同的功能但输入std命名空间?我在使用mingw-w64编译的程序中遇到了奇怪的效率问题,它比在linux上慢十倍以上。经过一些测试,我发现问题出在sprintf中。.然后我做了如下测试:#include//#include//usingstd::sprintf;intmain(){inti;for(i=0;i使用编译时它比使用快15倍.这是时间:$time./stdioreal0m0.557suser0m0.046ssys0m0.046s$time./cstdioreal0m7.465suser0m0.031ssys0m0.077s$g++--ver

c++ - 32 位与 64 位 : Massive Runtime Difference

我正在考虑以下C++程序:#include#includeintmain(intargc,char**argv){unsignedintsum=0;for(unsignedinti=1;i::max();++i){doublef=static_cast(i);unsignedintt=static_cast(f);sum+=(t%2);}std::cout我使用的是gcc/g++编译器,g++-v给出gcc版本4.7.220130108[gcc-4_7-branchrevision195012](SUSELinux)。我正在运行openSUSE12.3(x86_64)并拥有Intel(

c++ - 全局 Hook 是否可以跨 x86 和 x64 工作

我试图将所有内容嵌入到一个COMdll中。目前我按如下方式连接了WH_GETMESSAGE和WH_CBT:BOOLTouchDetector::SetMessageHook(BOOLInstall){if(Install){return((mHookMessage=::SetWindowsHookEx(WH_GETMESSAGE,MessageHookProc,mDll,0))!=NULL)&&((mHookWin=::SetWindowsHookEx(WH_CBT,WinHookProc,mDll,0))!=NULL);}else{returnUnhookWindowsHookEx(

c++ - 使用 MinGW-W64 的 LTO 导致 DLL 链接失败

我未能使用带-flto的MinGW-W64为Windowsx86-64构建共享库。这是我得到的(编译是在Linux机器上完成的):#...x86_64-w64-mingw32-g++-c-std=gnu++11-fvisibility=hidden-DGLEW_STATIC-Ofast-flto-frtti-pedantic-Wall-Wextra-fexceptions-mthreads-DUNICODE-DQT_LARGEFILE_SUPPORT-I.-I'include'-I'/usr/x86_64-w64-mingw32/share/qt4/mkspecs/win32-g++-

c++ - 架构 x86_64 的 undefined symbol : OS X, Boost Log,CMake

链接的另一个问题OSX10.9.5x64跨平台项目正在使用CMake工具链构建。使用boost。将所有可执行文件与BoostLog链接时出错(肯定找到了BOOST_PATH,单元测试与Boost测试链接成功)首先尝试。使用Clanggcc-vAppleLLVMversion6.0(clang-600.0.56)(basedonLLVM3.5svn)Target:x86_64-apple-darwin13.4.0Threadmodel:posix建筑boost./bootstrap&&./b2threading=multilink=staticruntime-link=staticins

c++ - 为原生 x64 编辑并继续

对于在x64中运行的C++代码,哪些VisualStudio版本已经支持“编辑并继续”?我听说VisualStudio2013是第一个为托管.NET代码引入x64EnC的版本。 最佳答案 感谢HansPassant的评论:根据MSDNblogpost从2015年7月22日起,VisualStudio2015引入了对64位的C++EnC(编辑并继续)支持。 关于c++-为原生x64编辑并继续,我们在StackOverflow上找到一个类似的问题: https:/