草庐IT

cast-expression

全部标签

c++ - 为什么 “cast from ‘X*’ 到 ‘Y’ 失去精度”是一个硬错误,什么是遗留代码的合适修复

1。为什么?像这样的代码曾经有效,它的含义很明显。编译器是否甚至允许(根据规范)让它成为一个错误?我知道它正在失去精度,我很乐意收到警告。但它仍然具有定义明确的语义(至少对于未签名的缩小规模转换已定义)并且用户可能只是想这样做。2。解决方法我有遗留代码,我不想重构太多,因为它相当棘手并且已经调试过了。它正在做两件事:有时将整数存储在指针变量中。如果代码之前在其中存储了一个整数,则该代码只会将指针转换为整数。因此,虽然Actor阵容正在缩小,但现实中永远不会发生溢出。代码已经过测试并且可以工作。当存储整数时,它总是适合普通的旧无符号类型,因此更改类型不是一个好主意并且指针被传递了很多次,

c++ - 如何使 `short-circuit evaluation` 在 `fold expressions` 中也可用?

#include#defineFORWARD(arg)\std::forward(arg)templateconstexprboolAndL(Args&&...args){return(...&&FORWARD(args));}templateconstexprboolAndR(Args&&...args){return(FORWARD(args)&&...);}intmain(){bool*pb=nullptr;false&&(*pb=true);//okatruntime.AndL(false,(*pb=true));//erroratruntime!AndR(false,(*pb

c++ - 对相同(原始)类型的 static_cast 会产生任何代码吗?

我想这一切都在标题中说了...但这是一个例子。给定voidfunctionThatTakesAFloat(floatpar);floatf=3.5f;做functionThatTakesAFloat(static_cast(f));与相比产生任何额外的代码functionThatTakesAFloat(f);或者这个static_cast是否被编译器完全消除了?编辑:我正在使用VC++(2010) 最佳答案 5.2.9/-2-AnexpressionecanbeexplicitlyconvertedtoatypeTusingasta

c++ - static_cast<char*> 和 (char*) 之间的区别

这是我的第一个问题:)我有一堆文件,我打开它如下图所示;ifstreamin(filename,ios::binary|ios::in)然后,我希望在unsignedinthold中保存2个字节的数据;unsignedinthold;in.read(static_cast(&hold),2);这对我来说似乎是正确的。但是,当我用编译它时g++-ansi-pedantic-errors-Werror--Wall-omainmain.cpp编译器报错error:invalidstatic_castfromtype‘unsignedint*’totype‘char*’其实我已经通过将stat

c++ - 为什么这个 auto_ptr 的 dynamic_cast 会失败?

#include"iostream"classA{private:inta;public:A():a(-1){}intgetA(){returna;}};classA;classB:publicA{private:intb;public:B():b(-1){}intgetB(){returnb;}};intmain(){std::auto_ptra=newA();std::auto_ptrb=dynamic_cast>(a);return0;}错误:不能dynamic_cast`(&a)->std::auto_ptr::get()const 最佳答案

c++ - 结合 boost::lexical_cast 和 std::transform

我想写这样的东西,不能编译:std::vectoras;std::vectorbs(as.size());std::transform(as.beginn(),as.end(),bs.begin(),boost::lexical_cast);但这行不通,所以我创建了一个仿函数来为我做这件事:templatestructlexical_transform{templateDestoperator()(constSrc&src)const{returnboost::lexical_cast(src);}};有更简单的方法吗? 最佳答案

c++ - 此模板代码中的错误 "Expected Expression"

为什么会出现此错误,我该如何解决?templatestructfoo{templatevoidhello(){}};templatestructbar{voidworld(){foof;f.hello();//Error:Expectedexpression}}; 最佳答案 您需要使用template消歧器,所以编译器会知道它应该解析hello作为模板成员函数的名称,以及后续的和>作为分隔模板参数的尖括号:f.templatehello();//^^^^^^^^ 关于c++-此模板代码中

c++ - 诺基亚是否误用了 static_cast?

我刚遇到thisexample:向下滚动到页面底部,您会在此处找到QWidget*pw=static_cast(parent);Parent的类型为:QObject,它是QWidget的基类,所以在这种情况下,不是:应该使用dynamic_cast吗?例如:QWidget*pw=dynamic_cast(parent)谢谢, 最佳答案 如果您知道您是从基类向下转型到子类(即,您知道该对象实际上是子类的一个实例),那么static_cast是完全合法的(并且性能更高)。 关于c++-诺基亚

c++ - 如何将 boost::any_cast 转换为 std::string

我有这个测试片段#include#include#include#include#includeclasswrapper{intvalue;charcharacter;std::stringstr;public:wrapper(inti,charc,std::strings){value=i;character=c;str=s;}voidget_data(){std::coutcontainer;container.push_back(10);container.push_back(1.4);container.push_back("Mayukh");container.push_ba

c++ - 指向指针的 Static_cast 整数地址

为什么以下内容需要C风格的转换?int*ptr=static_cast(0xff);//error:invalidstatic_castfromtype'int'//totype'int*'int*ptr=(int*)0xff;//ok. 最佳答案 static_cast只能在两个相关类型之间进行转换。整数与指针无关,反之亦然,因此您需要改用reinterpret_cast,它告诉编译器重新解释整数的位,就好像它们是指针(反之亦然):int*ptr=reinterpret_cast(0xff);阅读以下内容了解更多详情:Typeco