草庐IT

if-cases

全部标签

c++ - if 表达式中的操作顺序是否改变?

我最近遇到了一些我认为我马上就能理解的东西,但想多了,我想了解它为什么会这样工作。考虑下面的代码。(x--==9)显然正在评估,而(y++==11)没有。我的第一个想法是逻辑&&启动,看到表达式已经变为false,并在评估表达式的第二部分之前退出。我想得越多,我就越不明白为什么会这样。据我了解,逻辑运算符按优先顺序低于增量运算。不应该评估(y++==11),即使整个表达式已经变为false?换句话说,操作顺序不应该规定(y++==11)在if语句实现整个表达式之前进行评估吗?假的?#includeusingnamespacestd;intmain(intargc,char**argv)

c++ - 我需要把 constexpr 放在 else-if 之后吗?

灵感来自thisanswer,我尝试复制并粘贴(并在main()中添加测试)此代码:templatestd::tuplefoo(Ta){ifconstexpr(std::is_same_v)return{a,0.0};elseif(std::is_same_v)return{0,a};elsereturn{0,0.0};}intmain(){auto[x,y]=foo("");std::cout这很简单-如果T推导出为int,我们要返回一个元组[a,0.0].如果T推导出为double,我们要返回一个元组[0,a].否则,我们要返回[0,0.0].如您所见,在main()函数,我正在调

c++ - 我应该用 'if' 语句统一两个相似的内核,冒着性能损失的风险吗?

我有2个非常相似的内核函数,代码几乎相同,但略有不同。目前我有两个选择:编写2种不同的方法(但非常相似)编写单个内核并将不同的代码块放在if/else语句中if语句会在多大程度上影响我的算法性能?我知道没有分支,因为所有block中的所有线程都会进入if或else。那么如果内核函数被多次调用,单个if语句会降低我的性能吗? 最佳答案 您还有第三种选择,即使用C++模板并将if/switch语句中使用的变量设置为模板参数。实例化您需要的每个版本的内核,然后让多个内核做不同的事情,无需担心分支分歧或条件评估,因为编译器将优化死代码并使用

JMeter 逻辑控制之IF条件控制器

逻辑控制之IF条件控制器测试环境JMeter-5.4.1循环控制器介绍添加WhileController右键线程组->添加->逻辑控制器->While控制器控制器面板介绍添加后,面板如下仅Expression值为true,才会执行位于其下的操作最好勾选(默认配置)InterpretConditionasVariableExpression?,这样Expression输入框可以有两种输入选择:输入一个值为true或者false的变量比如,如果你想测试,最后一个采样器执行是否成功,可以输入${JMeterThread.last_sample_ok}输入对bool表达式求值的函数(建议使用${__j

c++ - ifstream : check if opened successfully

一位同事刚刚告诉我这段代码:std::ifstreamstream(filename.c_str());if(!stream){throwstd::runtime_error("..");}会错的。他说如果打开成功,ifstream的计算结果为0。我的代码有效,但我想找到文档,但没有看到它说明如何检查打开是否成功。可以指点一下吗? 最佳答案 运算符!isoverloaded对于std::ifstream,所以你可以这样做。不过,在我看来,这是对运算符重载的可怕滥用(由标准委员会提出)。如果您只执行if(stream.fail()).

c++ - 是否有更短的方法来编写复合 'if' 条件?

这个问题在这里已经有了答案:Shorthandforcheckingforequalitytomultiplepossibilities[duplicate](3个回答)关闭6年前。只是而不是:if(ch=='A'||ch=='B'||ch=='C'||.....例如,喜欢:if(ch=='A','B','C',...是否还有一种更短的方式来总结条件? 最佳答案 strchr()可用于查看字符是否在列表中。constchar*list="ABCXZ";if(strchr(list,ch)){//'ch'is'A','B','C','

c++ - if (mask & VALUE) 还是 if ((mask & VALUE) == VALUE)?

您可能熟悉enum位掩码方案,例如:enumFlags{FLAG1=0x1,FLAG2=0x2,FLAG3=0x4,FLAG4=0x8,NO_FLAGS=0,ALL_FLAGS=FLAG1|FLAG2|FLAG3|FLAG4};f(FLAG2|FLAG4);我见过很多代码,然后测试掩码中的某个位,例如if((mask&FLAG3)==FLAG3)但这不就相当于这个吗?if(mask&FLAG3)使用第一个版本有什么理由吗?在我看来,第二个较短的版本更清晰。可能是C程序员遗留下来的习惯,他们认为应该将真值转换为1?(虽然即使在那里,较长的版本在赋值或return语句中比在条件语句测试中更

c++ - "IF"参数求值顺序?

if(a&&b){dosomething;}是否有可能从右到左评估参数(b->a)?如果"is",影响评估顺序的因素是什么?(我用的是VS2008) 最佳答案 在C++中,只有少数几个运算符可以保证计算顺序operator&&首先计算左操作数,如果该值在逻辑上是false然后它避免评估正确的操作数。典型用途例如if(x>0&&k/x这避免了除以零的问题。operator||首先计算左操作数,如果该值在逻辑上是true然后它避免评估正确的操作数。例如if(overwrite_files||confirm("Fileexisting,o

c++ - Consexpr if 具有非 bool 条件

我似乎发现了Clang和GCC不同意的地方。代码如下:intmain(){ifconstexpr(2){}}使用GCC7.4.0编译成功,但使用Clang7.0.0编译失败,并显示以下错误消息:test.cpp:3:17:error:constexprifconditionevaluatesto2,whichcannotbenarrowedtotype'bool'[-Wc++11-narrowing]ifconstexpr(2){}^1errorgenerated.cppreference似乎没有提到“缩小”,所以这似乎是一个Clang错误,但我并不完全确定。如果这是任一编译器的错误,

c++ - std::remove_if - lambda,不从集合中删除任何内容

好吧,我想我在这里犯了一个愚蠢的错误。我有一个DisplayDevice3d列表,每个DisplayDevice3d都包含一个DisplayMode3d列表。我想从DisplayDevice3d列表中删除没有任何DisplayMode3d的所有项目。我正在尝试使用Lambda来执行此操作,即://Ifthedevicedoesn'thaveanymodes,removeit.std::remove_if(MyDisplayDevices.begin(),MyDisplayDevices.end(),[](DisplayDevice3d&device){returndevice.Mode