草庐IT

if-else-statement

全部标签

c++ - 条件运算符总是可以被 if/else 替换吗?

直到现在我还在想条件运算符inta=b==2?x1:x2;始终可由if/else语句替换。inta;if(b==2)a=x1;elsea=x2;两者之间的选择总是一个品味问题。今天我正在处理一项任务,如果我可以写的话,引用将会很有用:int&a;if(b==2)a=x1;elsea=x2;这是不允许的,我尝试使用条件运算符初始化引用。这很有效,我开始意识到,条件运算符并不总是可以用if/else语句替换。我的结论对吗? 最佳答案 你是对的。条件运算符是一个表达式,而if-else是一个语句。可以用语句的地方可以用表达式,反之则不然。

c++ - std::remove_if 移除的元素到哪里去了?

reference说是templateForwardItremove_if(ForwardItfirst,ForwardItlast,UnaryPredicatep);Iteratorspointingtoanelementsbetweentheoldandthenewendsoftherangearestilldereferenceable,buttheelementsthemselveshaveunspecifiedvalues.我尝试了这个简单的程序来找出“未指定的值”的含义。#include#include#include#includeintmain(){std::vecto

c++ - find_if 不适用于 const_iterator

我写了这个程序://splitsasentenceintowords#include#include#include#include"spacefunc.h"usingstd::string;usingstd::cout;usingstd::endl;usingstd::find_if;intmain(){typedefstring::const_iteratoriter;stringinput="Thisisme";iteri=input.begin();while(i!=input.end()){iterj;i=find_if(i,input.end(),notspace);j=f

C++ SFINAE enable_if_t 在成员函数中,如何消除歧义?

假设我们有一些SFINAE成员函数:classfoo{template::value,S>voidbar(S&&s);template::value,S>voidbar(S&&s);}如果我们像上面那样声明,那么我们如何定义它们呢?他们的两个函数签名看起来像:templateinlinevoidfoo::bar(S&&s){...dosomething...}我见过返回std::enable_if_t的示例喜欢:templateautobar(S&&s)->std::enable_if_t::value,S>(...){...dosomething...}根据返回类型消除歧义。但我不想

c++ - 为什么在具有多个 AND OR 的 If 语句中添加括号会给出不同的结果?

我有一个简单的程序,它有1个AND和多个OR运算符,如下所示:#includeusingnamespacestd;intmain(){boola=true;boolb=true;boolc=true;boold=true;if(!a&&b||c||d)cout我希望程序会输出pass因为我将a声明为true。但是,如果您运行该程序,它将给出输出:run如果我通过向添加方括号来更改if语句行if(!a&&(b||c||d))cout它将给出预期的输出pass。为什么会这样? 最佳答案 这是因为逻辑与操作符(&&)有一个更高的prece

c++ - 警告 : statement has no effect (C++)

我有以下代码:voidCScriptTable::EnumReferences(asIScriptEngine*engine){if(m_table){//Callthegcenumcallbackforeachnestedtablesize_tcol=0,row=0,num_cols=m_table->numCols(),num_rows=m_table->numRows();for(col;colgetColType(col)==COL_TABLE){for(row;rowgetTable(row,col);engine->GCEnumCallback(tbl);}}}}}编译(g

c++ - 就地 std::copy_if

在我看来,std::copy_if对于过滤容器非常有用:std::vectorvec{1,2,3,4};autoitEnd=std::copy_if(vec.begin(),vec.end(),vec.begin(),[](inti){returni>2;});vec.resize(itEnd-vec.begin());但是,std::copy_if指定输入和输出范围不能重叠。还有其他选择吗? 最佳答案 copy_if主要用于将范围复制到另一个范围/容器,即按照设计,该算法的本质是将满足某些条件的元素复制到另一个(非重叠)范围或新容

c++ - 避免一千个 if 语句的最佳方法?

我基本上遇到了这个问题:现在,我们有一个系统,它获取一个字符串作为输入,它基本上说ACTION:。对于每个Action都有一个自动生成的函数(RationalRoseGRRR),例如bouncer_comm.chatMessage("datagoeshere").sendAt(msg->sapIndex0());bouncer_comm.askforname().sendAt(msg->sapindex0());bouncer_comm返回一个RTOutSignal,我无法手动创建它们,因为rose使用了奇怪的结构。现在,我唯一的选择是创建一百个左右的if语句,我这样做:if(acti

c++ - 为什么 find_if 在我的程序中不起作用?

我有一个调用std::find_if的简单程序,我想我已经将前两个参数作为迭代器传递,将第三个参数作为预测传递,但是代码仍然无法编译,有什么想法吗?#include#include#includeboolnotspace(charch);boolspace(charch);intmain(){typedefstd::string::const_iteratoriter;iteri;std::strings="abc";i=std::find_if(i,s.end(),space);return0;}boolspace(charch){returnstd::isspace(ch);}错误

c++ - 为什么我不需要循环和 if 语句的括号

我不明白为什么在这种情况下我不需要括号for(inti=0;i为什么在这种情况下我需要括号intnum[10],min;for(inti=0;i>num[i];} 最佳答案 for和if后面必须跟一个“声明”。“语句”可以是一个简单的语句,例如min=num[i];,一个更复杂的像if(num[i]或者它可以是一个复合语句(即零个或多个包含在花括号中的简单语句),例如{std::cout>num[i];}有些人认为用语法上多余的花括号把简单的语句弄得乱七八糟是一种很好的风格。其他人没有。