草庐IT

if-condition

全部标签

c++ - 哪个更快?函数调用还是条件 if 语句?

在回答这个问题之前,请考虑分支预测。在某些情况下,我可以在函数指针的帮助下将条件语句替换为对函数的调用。类似这样的事情。(对于类似类型的senario,您可以考虑基于组件的编程而不是继承)classShape{floatArea(){if(type==SQUARE){returnlength*length;}elseif(type==RECTANGLE){returnlength*breadth;}}}同一个类可以这样写。classShape{voidSetAreaFunction(void*funcptr)//thisfunctionisusedtosetthecurrentArea

c++ - If-else-if 与 map

假设我有这样一个if/else-if链:if(x.GetId()==1){}elseif(x.GetId()==2){}//...50moreelseifstatements我想知道的是,如果我保留一张map,它在性能方面会不会更好?(假设键是整数) 最佳答案 map(通常)是使用红黑树实现的,它提供O(logN)查找,因为树始终保持平衡。您的if语句线性列表将是O(N)最坏的情况。所以,是的,map的查找速度会快得多。许多人建议使用switch语句,这对您来说可能不会更快,具体取决于您的实际if语句。编译器有时可以通过使用O(1)

c++ - static_if 会弃用模板特化吗?

像这样的一些常用模板特化:templateclassC{voidcommon(){...}voidf2=delete;};templateclassC{voidcommon(){...}voidf1(){...}};可以用static_if表示作为:templateclassC{voidcommon(){...}static_if(std::is_same::value){voidf1(){...}}else{voidf2()=delete;}}这些是直接竞争的功能吗?模板特化可以做static_if做不到的事情吗?看起来static_if可以做模板特化可以做的一切,甚至更多。顺便说一

C++ std::set::erase 与 std::remove_if

此代码有VisualStudioerrorC3892。如果我将std::set更改为std::vector-它有效。std::seta;a.erase(std::remove_if(a.begin(),a.end(),[](intitem){returnitem==10;}),a.end());怎么了?为什么我不能将std::remove_if与std::set一起使用? 最佳答案 您不能使用std::remove_if()具有const的序列部分。std::set的序列元素由Tconst组成对象。事实上,我们昨天在标准C++委员会

c++ - 在 std::conditional 中使用不完整类型的 sizeof

这是一个最小的例子:structincomplete_type;templatestructfoo{usingtype=std::conditional_t,std::conditional_t,double>;};foof;会导致错误,因为它会对类型执行sizeof,即使incomplete_type不是算术类型(iow,它不会在逻辑上进入sizeof分支)。livedemo所以,我想推迟sizeof:第一次尝试(失败)templateautofoo_aux(){if(sizeof(T)conditional_t,decltype(foo_aux()),double>仍然触发相同的错

c++ - 此 C/C++ if() 语句的计算结果是否为 TRUE?

根据PC-lint,以下语句永远不会TRUE:if((variable&0x02)==1)我正在为嵌入式系统使用C编译器,只要设置了variable中的相应位,它就会将其评估为TRUE。我猜编译器正在对==的两侧进行TRUE/FALSE比较,而不是比较结果数字。换句话说,每当表达式(varable&0x02)不为零(即TRUE)时,语句也将为TRUE,因为值1也是TRUE(不是零)。我不知道C/C++标准是否明确定义了编译器在这种情况下的行为方式。有没有C/C++专家可以根据标准(例如C90、C99等)回答这个问题?P.S.:在上面的语句中,“variable”是一个unsignedc

c++ - 代码优化;切换与 if 的

我有一个问题,关于在一个经常被调用的函数中是使用“case”还是“ifs”。这是现在的以下内容,在“ifs”中;代码是不言自明的:intidentifyMsg(char*textbuff){if(!strcmp(textbuff,"text")){return1;}if(!strcmp(textbuff,"name")){return2;}if(!strcmp(textbuff,"list")){return3;}if(!strcmp(textbuff,"remv")){return4;}if(!strcmp(textbuff,"ipad")){return5;}if(!strcmp(

c++ - if( var == 'x' ) 这样的语句中的文字存储在哪里?

像这样说charvar;if(var=='x');我们是否首先为“x”分配任何内存?如果是,它是哪个(堆栈/数据)?谢谢! 最佳答案 值“x”可以作为比较指令的一部分直接存储在代码段中,也可以存储在代码段中以立即加载到寄存器中,或存储在数据段中以间接加载或比较。这取决于编译器。 关于c++-if(var=='x')这样的语句中的文字存储在哪里?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/ques

c++ - 在 C++ 中用 for(;condition;) 替换 while(condition) 有什么理由吗?

看起来像while(condition){//dostuff}完全等同于for(;condition;){//dostuff}是否有任何理由使用后者而不是前者? 最佳答案 据我所知,没有好的理由。您使用不增加任何内容的for循环是故意误导人们。更新:根据OP对问题的评论,我可以推测您如何在实际代码中看到这样的结构。我以前见过(并使用过)这个:lots::of::namespaces::container::iteratoriter=foo.begin();for(;iter!=foo.end();++iter){//dostuff}

c++ - std::enable_if 的模糊部分特化

我在如下情况下遇到了问题:#include#include#defineTRACEvoidoperator()()const{std::cerrstructcheck:std::true_type{};templatestructconvert{TRACE;//firstcase};templatestructconvert::value&&check::value),void>::type>{TRACE;//secondcase};templatestructconvert::value),void>::type>{TRACE;//thirdcase};然后convertc;c();