草庐IT

my_numeric_cast

全部标签

c++ - gcc 与 clang : noexcept parsed in unused template specialization when static casting

我正在尝试将函数指针静态转换为特定函数重载,但似乎clang仍会解析(未使用的)模板特化的noexcept语句,从而生成编译器错误。如果未使用相应的函数重载,GCC似乎并不关心noexcept。templatevoidfun(T)noexcept(T(1)){}voidfun(int){}voidfun(int*){}intmain(){inta;fun(&a);//callingworksfinefun(a);static_cast(&fun);//staticcastingdoesn't}https://godbolt.org/z/ixpl3f这里是哪个编译器出错了?当将函数指针转

c++ - 带有转换运算符的类上的 static_cast

我刚刚遇到这种行为,我很难理解为什么这不起作用。enumclassTestEnum{Foo,Bar};classMyClass{public:operatorTestEnum(){returnm_enum;}TestEnumm_enum=TestEnum::Foo;}MyClasstheClass;intenumValue=static_cast(theClass);//doesnotwork,conversionoperatornotcalledintenumValue=static_cast(static_cast(theClass))//worksasexpected我知道编译器

c++ - boost::any_cast - 仅在隐式转换不可用时抛出?

我要boost::any_cast仅在any类型时抛出异常没有隐式转换为T.如果any的类型,正常行为似乎是抛出异常。不是T,不考虑隐式转换。例子:boost::anya=1;boost::any_cast(a);//Thissucceeds,andrightfullysoboost::any_cast(a);//Idon'twantthistothrowboost::any_cast(a);//Iwantthistothrow谁能告诉我是否有一种简单的方法来获得我想要的功能,或者更好的是给我一个充分的理由来说明为什么现有的行为是这样的? 最佳答案

c++ - reinterpret_cast<int*>(char*) 与 static_cast<int*>(static_cast<void*>(char*)) - 使用哪个?

当你动态分配了一个char*类型的缓冲区并想将它转换为特定类型时,你是否应该使用类似的东西reinterpret_cast(char*)或者类似的东西static_cast(static_cast(char*))为什么?我个人很想使用后者,因为对我来说,它并不是真正的数据“重新解释”(而只是一种分配缓冲区的机械方式)而且它看起来不像是一个来源错误的方式可能与典型的reinterpret_cast相同,但这是正确的直觉吗? 最佳答案 AccordingtoDaveAbrahams,使用链式static_casts是强制指针类型的正确、

c++ - static_cast 和临时创建(最终版)

先决条件:要理解这个问题,请先阅读以下问题及其答案:Castauto_ptrtoauto_ptr在Castauto_ptrtoauto_ptr史蒂夫回答说,“您的static_cast会将auto_ptr复制到一个临时文件,因此aS将被重置,当临时文件(在语句末尾)时,资源将被销毁。”我对static_cast时临时创建的过程很感兴趣叫做。我想要我可以跟踪的代码以查看此效果。我不能使用static_cast>...因为它不能被编译,所以我需要写一些模拟类而不是auto_ptr并观看临时创建的过程。我也明白临时创建与复制构造函数调用密切相关。auto_ptr的所有权丢失是通过设置_rad

c++ - 在启用 ARC 的情况下使用 reinterpret_cast

我在支持ARC的Objective-C项目中包含了一个库的头文件。我知道库没有在启用ARC的情况下编译,但问题出在库的头文件上,特别是这些行:templatestaticinlineType_&MSHookIvar(idself,constchar*name){Ivarivar(class_getInstanceVariable(object_getClass(self),name));void*pointer(ivar==NULL?NULL:reinterpret_cast(self)+ivar_getOffset(ivar));return*reinterpret_cast(poi

c++ - _wtoi 返回零 : input zero or non-numerical input?

_wtoi当不能转换输入,所以输入不是整数时,返回零。但同时输入可以为零。这是一种确定输入是否错误或为零的方法吗? 最佳答案 这是C++,您应该使用stringstream进行转换:#include#includeintmain(){usingnamespacestd;strings="1234";stringstreamss;ss>i;if(ss.fail()){throwsomeWeirdException;}coutboost的lexical_cast有一个更简洁、更简单的解决方案:#include//...std::stri

c# - 是否有相当于 C# TryParse 的 boost lexical_cast?

简介(来自EricLippert博客):Vexingexceptionsaretheresultofunfortunatedesigndecisions.Vexingexceptionsarethrowninacompletelynon-exceptionalcircumstance,andthereforemustbecaughtandhandledallthetime.TheclassicexampleofavexingexceptionisInt32.Parse,whichthrowsifyougiveitastringthatcannotbeparsedasaninteger.

c++ - 为什么我收到错误 : initializing argument 1 of 'Item::Item(int)' [-fpermissive] in Eclipse when I try to compile my C++ code?

我是C++的新手,在盯着它看了太久之后终于放弃了尝试编译它。编译器似乎出于某种原因拒绝了头文件中的构造函数原型(prototype)......我无法弄清楚它有什么问题。项目.h:#ifndefITEM_H_#defineITEM_H_classItem{public:Item(int);//ThislineiswhatEclipsekeepsflaggingupwiththeerrorinthetitlevirtual~Item();Item*getNextPtr();intgetValue();voidsetNextPtr(Item*);};#endif/*ITEM_H_*/在我的

c++ - ponter 和不同大小的整数类型之间的 reinterpret_cast

当我们执行以下操作时实际发生了什么:1)inti=-1;//32bitvoid*p;p=reinterpret_cast(i)在64位架构上,sizeof(void*)==82)longlongi;//64bitvoid*p=(unsignedint)(-1);i=retinterpret_cast(p)在32位架构上sizeof(void*)=4我大体上知道结果是什么,但我希望有人用C++标准来描述这个机制,以便更好地理解。在第二种情况下,行为类似于“积分促销”(4.5)中描述的行为(我将为-1)对于“int-unsignedlong”的情况,我们通常会说指针像有符号整数一样转换吗?