草庐IT

c++在for循环中初始化2个不同的迭代器

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:CanIdeclarevariablesofdifferenttypesintheinitializationofaforloop?我想在c++中有一个for循环,它在初始化时构造了2种不同类型的vector迭代器。这是我想要的粗略想法:std::vectordubVec;std::vectorintVec;doubleresult=0;dubVec.push_back(3.14);intVec.push_back(1);typedefstd::vector::iteratorintIter;typedefs

c++ - 为什么 c++ 不支持 for 循环中的多个初始化程序?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:InC++whycan'tIwriteafor()looplikethis:for(inti=1,doublei2=0;Whyisitso'hard'towriteafor-loopinC++with2loopvariables?#includeusingnamespacestd;intmain(){for(inti=0,doublej=3.0;i不编译,因为在for-loop初始化block中有两个声明。但是为什么? 最佳答案 如果你想要int和doub

c++ - 在 C++ 中的 for 循环中重新声明变量

当尝试为多个平台编译以下(简化的)代码时,我发现它在某些平台上失败了,即IBM的xlC_r。进一步的调查发现,它在comeau和clang上也失败了。使用g++和Solaris的CC编译成功。代码如下:intmain(){inta1[1];boola2[1];for(int*it=a1,*end=a1+1;it!=end;++it){//...bool*jt=a2,*end=a2+1;//...}}xlC_r错误:"main.cpp",line8.25:1540-0400(S)"end"hasaconflictingdeclaration."main.cpp",line6.25:154

c++ - 为什么 asm 中的这种差异对性能很重要(在未优化的 ptr++ 与++ptr 循环中)?

TL;博士:第一个循环在HaswellCPU上运行速度提高了约18%。为什么?循环来自gcc-O0(未优化)循环使用ptr++对比++ptr,但问题是为什么生成的asm表现不同,而不是关于如何编写更好的C。假设我们有这两个循环:movl$0,-48(%ebp)//Loopcountersetto0movl$_data,-12(%ebp)//Pointertothedataarraymovl%eax,-96(%ebp)movl%edx,-92(%ebp)jmpL21L22://ptr++movl-12(%ebp),%eax//Getthecurrentaddressleal4(%eax)

c++ - 从循环中提升动态类型(也就是以 C++ 方式执行 Java)

我最近和一些friend讨论“现代”语言与C++相比的优点时,出现了以下情况(我认为是受Java启发):是否有任何C++编译器优化循环外的动态调度?如果没有,是否有任何结构可以让作者强制(或强烈鼓励)这种优化?这是一个例子。假设我有一个多态层次结构:structA{virtualintf(){return0;}};structB:A{virtualintf(){return/*somethingcomplicated*/;}/*...*/};现在我有一个累积f()的循环:intacc(constA*p,unsignedintN){intresult=0;for(unsignedinti

c++ - do while 循环中的 if 语句以 yes 或 no 结尾

这个问题在这里已经有了答案:cinandgetlineskippinginput[duplicate](4个回答)关闭4年前。我是编码新手,我正在尝试使用嵌套的if语句执行一个长的dowhile循环,但我在让我的循环实际运行时遇到问题环形。我没有直接在我的项目上获得帮助,它有很长的代码,我做了一个简单的喜欢它的版本。它也不会循环。它将到达最后并询问用户是否要再试一次,但是当输入“y”时,它会忽略if语句。#include#includeusingnamespacestd;intmain(){stringsodaChoice;charanswer='n';do{cout>answer;}

c++ - 为什么(void)在for循环中的两个逗号分隔语句之间

这个问题在这里已经有了答案:Whydoesstd::transformandsimilarcastthe'for'loopincrementto(void)?(2个回答)What'sthepointof(void)first2++here?[duplicate](1个回答)关闭5年前。以下代码来自cppreference.com上std::lexicographical_compare的实现示例:templateboollexicographical_compare(InputIt1first1,InputIt1last1,InputIt2first2,InputIt2last2){f

c++ - 忙等待循环中是否需要内存屏障或原子操作?

考虑下面的spin_lock()实现,最初来自thisanswer:voidspin_lock(volatilebool*lock){for(;;){//insertsanacquirememorybarrierandacompilerbarrierif(!__atomic_test_and_set(lock,__ATOMIC_ACQUIRE))return;while(*lock)//nobarriers;isitOK?cpu_relax();}}我已经知道的:volatile防止编译器在while循环的每次迭代中优化出*lock重新读取;volatileinsertsneither

c++ - pIter != cont.end() 在 for 循环中的性能

我最近正在阅读HerbSutter的“ExceptionalC++”,我对他在第6项-临时对象中给出的特定建议表示严重怀疑。他提出在以下代码中查找不必要的临时对象:stringFindAddr(listemps,stringname){for(list::iteratori=emps.begin();i!=emps.end();i++){if(*i==name){returni->addr;}}return"";}作为示例之一,他建议在循环之前预先计算emps.end()的值,因为每次迭代都会创建一个临时对象:Formostcontainers(includinglist),calli

c++ - 如何使用 C++ 限制循环中的 FPS?

我正在尝试使用带有计时和线程的C++来限制执行交叉检查的循环中的每秒帧数。这是我的代码:std::chrono::system_clock::time_pointnow=std::chrono::system_clock::now();std::chrono::system_clock::time_pointlastFrame=std::chrono::system_clock::now();while(true){//Maintaindesignatedfrequencyof5Hz(200msperframe)now=std::chrono::system_clock::now();