草庐IT

numeric_cast

全部标签

c++ - 为什么 memcpy 在解析二进制数据时比 reinterpret_cast 慢?

TLDR:我忘记启用编译器优化。启用优化后,性能(几乎)相同。原帖从二进制数据中读取整数时,我注意到memcpy比转换解决方案慢。版本1:reinterpret_cast,由于潜在的对齐问题而有异味,但也更快(?)intget_int_v1(constchar*data){return*reinterpret_cast(data);}版本2:memcpy,正确但速度稍慢:intget_int_v2(constchar*data){intresult;memcpy(&result,data,sizeof(result));returnresult;}我有abenchmarkonIdeon

c++ - 我们可以用 `const_cast`来修饰一个常量吗?

这个问题在这里已经有了答案:Twodifferentvaluesatthesamememoryaddress(7个答案)关闭5年前。intmain(){constintia=10;int*pia=const_cast(&ia);*pia=5;std::cout输出是:0x28fef40x28fef4105*pia和ia具有相同的地址,但它们具有不同的值。我的目的是用const_cast修改一个常量值,结果显示不行。有人知道为什么吗?

c++ - 当 A 和 B 没有共同的祖先时,通过 dynamic_cast 从 A* 转换为 B* 是否有效?

clang3.5.0和g++4.9.0compilethefollowingcodefine(使用-std=c++11-Wall-Wextra-pedantic-errors)并且程序输出true:#includestructA{virtual~A()=default;};structB{virtual~B()=default;};structC:A,B{virtual~C()=default;};intmain(){Cc;A*ap=&c;B*bp=dynamic_cast(ap);std::cout 最佳答案 是的。这有时称为交叉

c++ - 什么时候使用引用的dynamic_cast?

这个问题在这里已经有了答案:Differenceinbehaviorwhileusingdynamic_castwithreferenceandpointers(4个答案)关闭7年前。我正在阅读“C++之旅”一书,但无法理解以下段落。“不同类型是NotAcceptable”是什么意思?那么,什么时候使用指针转换,什么时候使用引用转换呢?有人可以详细说明吗?谢谢。编辑:另一个问题“Differenceinbehaviorwhileusingdynamic_castwithreferenceandpointers”询问的是dynamic_cast的行为,我可以理解它-返回nullptr或抛

c++ - 为什么 numeric_limits<T>::min() 不返回最小值?

当我运行这段代码时:#include#include#defineTdoubleintmain(){staticconstTval=std::numeric_limits::min();printf("%g/2=%g\n",val,val/2);}我希望看到不可预测的结果。但我得到了正确的答案:(16:53)>clang++test_division.cpp-otest_division(16:54)>./test_division2.22507e-308/2=1.11254e-308这怎么可能? 最佳答案 因为min为您提供了最小

c++ - 有效地 const_cast-ing 常量引用参数

我有一个成员函数,它接受另一个对象的常量引用参数。我想const_cast这个参数以便在成员函数中轻松使用它。为此,以下哪个代码更好?:voidAClass::AMember(constBClass&_BObject){//FORM#1-Castasanobject:BClassBObject=const_cast(_BObject);//...}voidAClass::AMember(constBClass&_BObject){//FORM#2-Castasareference:BClass&BObject=const_cast(_BObject);//...}你能比较一下这两种形式

C++ const_cast 用法而不是 C 风格的转换

为什么会这样?constinti0=5;//inti1=const_cast(i0);//compilationerrorinti2=(int)i0;//okayinti3=5;//constinti4=const_cast(i3);//compilationerrorconstinti5=(constint)i3;//okay 最佳答案 constinti0=5;//inti1=const_cast(i0);//compilationerrorinti2=(int)i0;//okayinti3=5;//constinti4=con

c++ - 工厂、unique_ptr 和 static_cast

考虑具有基对象、派生接口(interface)和最终对象的多态类://baseobjectstructobject{virtual~object()=default;};//interfacesderivedfrombaseobjectstructinterface1:object{virtualvoidprint_hello()const=0;templatestaticvoidon_destruction(object*/*ptr*/){std::cout在实际用例中,最终对象是通过插件系统定义的,但这不是重点。请注意,我希望能够在销毁对象时调用on_destruction(请参阅

c++ - 是否有等同于 std::numeric_limits 的 CUDA?

我想确定最大值intCUDA内核中的值。不幸的是,我找不到任何类似于std::numeric_limits的东西对于CUDA。尝试使用::std函数导致错误:error:callinga__host__function("std::numeric_limits::max")froma__global__function("xyz_kernel")isnotallowedC:\cuda.cu(153)(col.10)有没有一种方法可以通过内核确定所需的值,或者我应该将其作为参数传递? 最佳答案 它存在,但不像std::numeric_

c++ - 这是 const_cast 未定义的行为吗?

我想知道以下是否是未定义的行为//Case1:int*p=0;intconst*q=*const_cast(&p);//Case2:(Ithinkthisisthesame)int*p=0;intconst*const*pp=&p;intconst*q=*pp;读取int*是否是未定义的行为,就好像它是intconst*一样?我认为这是未定义的行为,但我以前认为通常只添加const是安全的,所以我不确定。 最佳答案 资格方面,没问题。将每个表达式拆分为一个语句:int*p=0;//okint**addrp=&p;//okintcon