草庐IT

INCREMENT

全部标签

c++ - 无法解释编译器的行为

考虑这个简单的代码:classA{public:intvalue;A(intvalue){this->value=value;}~A(){printf("destroying%d\n",value);}Aoperator++(){returnA(value+1);}};intmain(){Aa(1);printf("beforeincrement:%d\n",a.value);a=++a;printf("afterincrement:%d\n",a.value);return0;}这个输出:beforeincrement:1destroying2afterincrement:2dest

c++ - 应用关于如何递增枚举的规则

有没有办法改变枚举设置其常量值的方式?通常它会递增一个,但我想应用另一个规则。在PAWN中这会起作用enum(有没有办法在C++中做到这一点? 最佳答案 不是自动的,但是你可以手动指定每个值enumX{a=0x01,b=0x02,c=0x04}; 关于c++-应用关于如何递增枚举的规则,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/28808848/

C++ : List iterator not incrementable

尝试删除列表的最后一个元素时出现此错误。我调试了代码并且能够找出导致它的原因和位置,这是我的代码:for(Drop_List_t::iteratori=Drop_System.begin();i!=Drop_System.end()&&!Drop_System_Disable;/**/){if(Player->BoundingBox.Intersect(&(*i)->BoundingBox)){i=Drop_System.erase(i);}++i;//Listiteratorcrasheshereiflastentrywasdeleted}我不知道我做错了什么……有什么建议吗?

c++ - 新手在这里 : Different results on PC and MAC. 为什么?

这个问题在这里已经有了答案:Whyaretheseconstructsusingpreandpost-incrementundefinedbehavior?(14个答案)关闭8年前。我现在正在尝试学习C/C++的基础知识。我正在学习Lynda.com上的类(class)我的问题涉及第4章“C/C++基本培训类(class)中的宏警告”中的一系列代码。我已按照所有设置程序在Mac上正确设置Xcode和Eclipse,在PC上正确设置Eclipse。当我在MAC和PC上运行这段代码时,我得到了不同的结果。只是想了解为什么会发生这种情况,以及我可以做些什么来在两者上获得相同的结果。代码如下:

c++ - C++中的指针递增

这是什么意思:指针增量指向指针的下一个基类型的地址?例如:p1++;//p1isapointertoanint这个语句是否意味着p1指向的地址应该更改为下一个int的地址,或者它应该只增加2(假设一个int是2个字节),在这种情况下,特定地址可能不包含int?我的意思是,如果p1是0x442012,那么p1++会是0x442014(它可能是double地址的一部分)还是会指向下一个int是像0x44201F这样的地址吗?谢谢 最佳答案 指针算法不关心指针对象的内容或有效性。它将使用以下公式简单地增加指针地址:new_value=re

c++ - boolean 运算符++和——

今天,在编写一些VisualC++代码时,我遇到了一些让我感到惊讶的事情。似乎C++支持bool的++(递增),但不支持--(递减)。这只是一个随意的决定,还是背后有某种原因?编译:staticHMODULEhMod=NULL;staticboolonce=false;if(!once++)hMod=LoadLibrary("xxx");这不是:staticHMODULEhMod=NULL;staticboolonce=true;if(once--)hMod=LoadLibrary("xxx"); 最佳答案 它来自使用整数值作为bo

c++ - 使用方法失败更改 constexpr 对象成员

我试图通过一种方法更改constexpr对象成员的值,但我不明白为什么它在这种特定情况下不起作用:#includestructtest{intm_counter=0;constexprtest(){m_counter++;m_counter++;increment();increment();increment();}constexprvoidincrement(){m_counter++;}constexprintvalue()const{returnm_counter;}};templateconstexprvoidcheck(){std::cout();}我不明白为什么在全局范围

c++ - `std::condition_variable::wait_for` 经常调用谓词

考虑以下代码片段:#include#include#include#includeintmain(){std::mutexy;std::condition_variablex;std::unique_locklock{y};inti=0;autoincrement=[&]{++i;returnfalse;};usingnamespacestd::chrono_literals;//lock5sifincrementreturnsfalse//let'sseehowoftenwasincrementcalled?x.wait_for(lock,5s,increment);std::cou

c++ - 为什么 C++ 接受一个变量的多个前缀而不是后缀

在查看Canyouhaveaincrementorandadecrementoronthesamevariableinthesamestatementinc时我发现你可以在一个变量上有多个前缀递增/递减运算符,但只有一个后缀例如:++--++foo;//validfoo++--++;//invalid--foo++;//invalid这是为什么? 最佳答案 这是因为在C++(但不是C)中,++x的结果是一个lValue,这意味着它是可赋值的,因此是可链接的。但是,x++的结果不是lValue,而是prValue,这意味着它不能被赋值

c++ - 为什么后增需要复制,而前增不需要

我知道这个问题已经讨论过好几次了,但是我找不到解释为什么在后增量操作的情况下需要制作拷贝的帖子。引用来自stackoverflow的回复:intj=i++;//jwillcontaini,iwillbeincremented.intj=++i;//iwillbeincremented,andjwillcontaini+1.当考虑后/前增量的定义时,这完全有意义。很多时候比较pre/postincrement的性能时说postincrement需要做一个copy,increment它并返回copy,而pre-increment只是增加值,不会创建copy。虽然对比了几十个帖子的性能,但是