草庐IT

enable_if_c

全部标签

c++ - 我是否使用了 copy_if 错误?

我正在使用VisualStudio2010,我正在尝试使用std::copy_if,我想复制所有满足谓词的值。例如:structcomp{booloperator()(constinti){returni==5||i==7;}};intmain(){arrayarr={3,2,5,7,3,5,6,7};vectorres;copy_if(arr.begin(),arr.end(),res.begin(),comp());for(inti=0;i但是当我运行这段代码时,我得到:vectoriteratornotincrementable。 最佳答案

c++ - 我是否使用了 copy_if 错误?

我正在使用VisualStudio2010,我正在尝试使用std::copy_if,我想复制所有满足谓词的值。例如:structcomp{booloperator()(constinti){returni==5||i==7;}};intmain(){arrayarr={3,2,5,7,3,5,6,7};vectorres;copy_if(arr.begin(),arr.end(),res.begin(),comp());for(inti=0;i但是当我运行这段代码时,我得到:vectoriteratornotincrementable。 最佳答案

c++ - 在 if 条件表达式中构造的未命名临时对象的生命周期

标准如何定义在评估if条件表达式期间构造的临时对象的生命周期?我查找了这些信息,并在一个示例中找到了与第10页$1.9中的[10]类似的内容。(我在这里指的是新规范的最终草案。)但仍然不清楚(足够)对我来说,因为VisualC++的行为与我对那个例子的理解不同,所以我决定问。请提供适当的规范引用。如果您命名该对象,它将在整个if中持续存在(因此trueblock和falseblock都在之前被销毁如果结束)。例如:if(MyClassx=f()){/*...*/}else{/*...*/}nextInstruction();x可以在两个ifblock中使用,但在nextInstruct

c++ - 在 if 条件表达式中构造的未命名临时对象的生命周期

标准如何定义在评估if条件表达式期间构造的临时对象的生命周期?我查找了这些信息,并在一个示例中找到了与第10页$1.9中的[10]类似的内容。(我在这里指的是新规范的最终草案。)但仍然不清楚(足够)对我来说,因为VisualC++的行为与我对那个例子的理解不同,所以我决定问。请提供适当的规范引用。如果您命名该对象,它将在整个if中持续存在(因此trueblock和falseblock都在之前被销毁如果结束)。例如:if(MyClassx=f()){/*...*/}else{/*...*/}nextInstruction();x可以在两个ifblock中使用,但在nextInstruct

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_ass

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_ass

c++ - 为什么模板参数中的 enable_if_t 提示重新定义?

我有以下使用std::enable_if的案例:template::value>::type*=nullptr>voidf(){}template::value>::type*=nullptr>voidf(){}现在,我在cppreference中看到了新语法,在我看来更简洁:typename=std::enable_if_t::value>>我想移植我的代码:template::value>>voidg(){}template::value>>voidg(){}但现在GCC(5.2)提示:error:redefinitionof'templatevoidg()'voidg(){}为什

c++ - 为什么模板参数中的 enable_if_t 提示重新定义?

我有以下使用std::enable_if的案例:template::value>::type*=nullptr>voidf(){}template::value>::type*=nullptr>voidf(){}现在,我在cppreference中看到了新语法,在我看来更简洁:typename=std::enable_if_t::value>>我想移植我的代码:template::value>>voidg(){}template::value>>voidg(){}但现在GCC(5.2)提示:error:redefinitionof'templatevoidg()'voidg(){}为什

c++ - 如何断言 constexpr if else 子句永远不会发生?

如果条件为真,我想在非constexpr时引发编译时错误,例如:ifconstexpr(condition1){...}elseifconstexpr(condition2){....}elseifconstexpr(condition3){....}else{//Iwanttheelseclausenevertaken.ButIheardthecodebelowisnotallowedstatic_assert(false);}//I'drathernotrepeattheconditionsagainlikethis:static_assert(condition1||condit

c++ - 如何断言 constexpr if else 子句永远不会发生?

如果条件为真,我想在非constexpr时引发编译时错误,例如:ifconstexpr(condition1){...}elseifconstexpr(condition2){....}elseifconstexpr(condition3){....}else{//Iwanttheelseclausenevertaken.ButIheardthecodebelowisnotallowedstatic_assert(false);}//I'drathernotrepeattheconditionsagainlikethis:static_assert(condition1||condit