草庐IT

If-Modified-Since

全部标签

c++ - 与默认 IF 相比,简写 IF 是否会提高效率?

如果我有一个包含任意长度整数的大型数据文件,需要按它的第二个字段进行排序:13451457-134567124583941384-193819483848089-1485001048018401039888//considerthisisaLARGEfile,thedatagoesonforquitesometime我呼吁qsort成为我的首选武器,在我的排序函数中,使用速记IF是否会显着提高数据排序所需的总时间?还是简写IF只是为了方便组织代码?num2=atoi(Str);num1=atoi(Str2);LoggNum=(num2>num1)?num2:num1;//faster?

c++ - 使用超过 50 个 OR ( || ) 优化 if 语句

好的,我正在做一些涉及键盘输入的事情。我现在有一个像这样的巨大功能:returnkey==BB_KEY_SPACE||key==BB_KEY_ZERO||key==BB_KEY_ONE||key==BB_KEY_TWO||key==BB_KEY_THREE||key==BB_KEY_FOUR||key==BB_KEY_FIVE||key==BB_KEY_SIX||key==BB_KEY_SEVEN||key==BB_KEY_EIGHT||key==BB_KEY_NINE||key==BB_KEY_A||key==BB_KEY_B||key==BB_KEY_C||key==BB_KEY_

C++ std::enable_if

我对std::enable_if很陌生,想知道如何使用它。我有一个模板类:templateclassfoo{}现在我只想在a+b等于10时实例化它。我可以使用std::enable_if使这成为可能吗?第二个问题:如果我在类foo中有一个成员templateclassfoo{intc;}我只想在什么时候有ca=5.我如何使用std::enable_if做到这一点?这是使用std::enable_if的正确情况吗? 最佳答案 template::type>classfoo{};这应该可以完成工作;只需确保在实例化模板时永远不会显式提供

c++ - 相同的 C++ 'if' 语句,在 Linux/Windows 上的结果不同

我发现了一个有趣的案例,即相同的C++代码在不同的系统上产生不同的结果。#includeintmain(){inta=20,b=14;if(a*1.0/b*(a+1)/(b+1)==2)printf("YES!");elseprintf("NO!");}使用GCC4.6.3在UbuntuLinux12.04上编译它输出YES!使用GCC4.6.2在Windows7上编译它输出NO!但是,使用:doublec=a*1.0/b*(a+1)/(b+1);if(c==2)printf("YES!");...将在两台机器上返回YES!。知道为什么会出现这种差异吗?这是由编译器版本不匹配引起的吗(

c++ - if 条件的更好算法

我有一个代码,其中包含boolfn(){...//allthefollowingarebooleanfunctions.returnisTrue()&&isMsgReceived()&&isMsgSent();}问题在于每个返回的bool函数本身都非常冗长并且需要大量计算。实际上,如果前一个函数已经失败(和条件),则检查后续函数没有意义。您能否建议更简单的方法来返回false,以防万一开始的函数之一已经失败并且不再进行进一步检查。目的是减少计算时间。 最佳答案 &&已经为您做到了。如果isTrue()返回false,则不会评估接下来

c++ - C/C++ 编译器会优化这个 if 语句吗?

我有这样的代码,但我觉得它有点难读://code1if((expensiveOperation1()&&otherOperation()&&foo())||(expensiveOperation2()&&bar()&&baz()){//dosomething}我只是将其更改为以下内容,以使其更具可读性://code2constboolexpr1=expensiveOperation1()&&otherOperation()&&foo();constboolexpr2=expensiveOperation2()&&bar()&&baz();if(expr1||expr2){//oneof

C++, 'if' 表达式中的变量声明

这是怎么回事?if(inta=Func1()){//Works.}if((inta=Func1())){//Failstocompile.}if((inta=Func1())&&(intb=Func2()))){//Dostuffwithaandb.//ThisiswhatI'dreallyliketobeabletodo.}2003标准中的第6.4.3节解释了在选择语句条件中声明的变量如何具有扩展到条件控制的子语句末尾的范围。但我看不出它在哪里说了不能在声明两边加上括号,也没有说每个条件只能有一个声明。即使在条件中只需要一个声明的情况下,这种限制也很烦人。考虑一下。boola=fal

c++ - "warning: operation of ... may be undefined"用于三元运算——不是 if/else block

这个问题在这里已经有了答案:Undefinedbehaviorandsequencepoints(5个答案)关闭6年前。这是我的代码:intmain(){staticinttest=0;constintanotherInt=1;test=anotherInt>test?test++:0;if(anotherInt>test)test++;elsetest=0;return0;}这是我构建它时产生的警告:../main.cpp:15:40:warning:operationon‘test’maybeundefined[-Wsequence-point]test=anotherInt>te

c++ - constexpr if 和 static_assert

P0292R1constexprif一直included,在C++17的轨道上。它似乎很有用(并且可以替代SFINAE的使用),但是关于static_assert的评论是错误的,不需要诊断在false分支中吓到我了:Disarmingstatic_assertdeclarationsinthenon-takenbranchofaconstexprifisnotproposed.voidf(){ifconstexpr(false)static_assert(false);//ill-formed}templatevoidg(){ifconstexpr(false)static_asser

c++ - std::remove_if 和 erase 不从 std::vector 中移除元素

我正在练习leetcodeeasy问题。我想使用lambda从vector中删除_if(这是第一次,太棒了)。我得到一个指向new_end的负指针。#include#include#include#include//std::greaterusingnamespacestd;intmain(){vectora={2,7,11,15};inttarget=9;autonew_end=std::remove_if(a.begin(),a.end(),[&a,target](constintx){returnstd::count(a.begin(),a.end(),x)>target;});