草庐IT

Implicit_cast

全部标签

c++ - 在 64 位机器上编译 32 位代码时,我应该如何处理 "cast from ‘void*’ 到 ‘int’ 丢失精度?

我有一个可以在32位机器上编译并正常工作的包。我现在正在尝试让它在64位机器上编译并发现以下错误-error:castfrom‘void*’to‘int’losesprecision是否有一个编译器标志来抑制这些错误?还是我必须手动编辑这些文件以避免这些强制转换? 最佳答案 问题在于,在32位中,int(它是一个32位整数)将保存一个指针值。当您移至64位时,您不能再将指针存储在int中-它不足以容纳64位指针。intptr_ttype就是为此而设计的。 关于c++-在64位机器上编译3

c++ - 在 64 位机器上编译 32 位代码时,我应该如何处理 "cast from ‘void*’ 到 ‘int’ 丢失精度?

我有一个可以在32位机器上编译并正常工作的包。我现在正在尝试让它在64位机器上编译并发现以下错误-error:castfrom‘void*’to‘int’losesprecision是否有一个编译器标志来抑制这些错误?还是我必须手动编辑这些文件以避免这些强制转换? 最佳答案 问题在于,在32位中,int(它是一个32位整数)将保存一个指针值。当您移至64位时,您不能再将指针存储在int中-它不足以容纳64位指针。intptr_ttype就是为此而设计的。 关于c++-在64位机器上编译3

c++ - const_cast 安全吗?

我在const_cast上找不到太多信息.我能找到的唯一信息(在StackOverflow上)是:Theconst_cast()isusedtoadd/removeconst(ness)(orvolatile-ness)ofavariable.这让我很紧张。可以使用const_cast导致意外行为?如果有,是什么?或者,什么时候可以使用const_cast? 最佳答案 const_cast仅当您正在转换最初不是const的变量时才是安全的.例如,如果您有一个函数,其参数为constchar*,你传入一个可修改的char*,const

c++ - const_cast 安全吗?

我在const_cast上找不到太多信息.我能找到的唯一信息(在StackOverflow上)是:Theconst_cast()isusedtoadd/removeconst(ness)(orvolatile-ness)ofavariable.这让我很紧张。可以使用const_cast导致意外行为?如果有,是什么?或者,什么时候可以使用const_cast? 最佳答案 const_cast仅当您正在转换最初不是const的变量时才是安全的.例如,如果您有一个函数,其参数为constchar*,你传入一个可修改的char*,const

c++ - C++ 中的 dynamic_cast 和 static_cast

我对C++中的dynamic_cast关键字感到很困惑。structA{virtualvoidf(){}};structB:publicA{};structC{};voidf(){Aa;Bb;A*ap=&b;B*b1=dynamic_cast(&a);//NULL,because'a'isnota'B'B*b2=dynamic_cast(ap);//'b'C*c=dynamic_cast(ap);//NULL.A&ar=dynamic_cast(*ap);//Ok.B&br=dynamic_cast(*ap);//Ok.C&cr=dynamic_cast(*ap);//std::bad

c++ - C++ 中的 dynamic_cast 和 static_cast

我对C++中的dynamic_cast关键字感到很困惑。structA{virtualvoidf(){}};structB:publicA{};structC{};voidf(){Aa;Bb;A*ap=&b;B*b1=dynamic_cast(&a);//NULL,because'a'isnota'B'B*b2=dynamic_cast(ap);//'b'C*c=dynamic_cast(ap);//NULL.A&ar=dynamic_cast(*ap);//Ok.B&br=dynamic_cast(*ap);//Ok.C&cr=dynamic_cast(*ap);//std::bad

(C++) 类与 static_cast 与 dynamic_cast

static_caststatic_cast相当于C语言里面的强制转换,适用于:用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。把空指针转换成目标类型的空指针。把任何类型的表达式转换成void类型。注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。dynamic_cast转换方式:

(C++) 类与 static_cast 与 dynamic_cast

static_caststatic_cast相当于C语言里面的强制转换,适用于:用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。把空指针转换成目标类型的空指针。把任何类型的表达式转换成void类型。注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。dynamic_cast转换方式:

【C#】尝试类型转换异常System.InvalidCastException: Specified cast is not valid.解决方案

由于对象是多态的,因此基类类型的变量可以保存派生类型。若要访问派生类型的方法,需要将值强制转换回该派生类型。不过,在这些情况下,如果只尝试进行简单的强制转换,会导致引发InvalidCastException的风险。这就是C#提供is和as运算符的原因。您可以使用这两个运算符来测试强制转换是否会成功,而没有引发异常的风险。通常,as运算符更高效一些,因为如果可以成功进行强制转换,它会实际返回强制转换值,转换不成功则返回null。而is运算符只返回一个布尔值。因此,如果只想确定对象的类型,而无需对它进行实际强制转换,则可以使用is运算符。as0bjecta=对象1;对象2b=aas对象1;(先将

【C#】尝试类型转换异常System.InvalidCastException: Specified cast is not valid.解决方案

由于对象是多态的,因此基类类型的变量可以保存派生类型。若要访问派生类型的方法,需要将值强制转换回该派生类型。不过,在这些情况下,如果只尝试进行简单的强制转换,会导致引发InvalidCastException的风险。这就是C#提供is和as运算符的原因。您可以使用这两个运算符来测试强制转换是否会成功,而没有引发异常的风险。通常,as运算符更高效一些,因为如果可以成功进行强制转换,它会实际返回强制转换值,转换不成功则返回null。而is运算符只返回一个布尔值。因此,如果只想确定对象的类型,而无需对它进行实际强制转换,则可以使用is运算符。as0bjecta=对象1;对象2b=aas对象1;(先将