草庐IT

enable_if_c

全部标签

c++ - 为什么用 enable_if 编译错误

为什么这不能用gcc48和clang32编译?#includetemplatestructS{templatetypenamestd::enable_if::typef(Tt){return1;};templatetypenamestd::enable_if::typef(Tt){return2;};};intmain(){Ss1;returns1.f(99);}GCC错误:/home/lvv/p/sto/test/t.cc:12:2:error:notypenamed‘type’in‘structenable_if’f(Tt){return2;};^CLANG错误:/home/lvv

c++ - 为什么用 enable_if 编译错误

为什么这不能用gcc48和clang32编译?#includetemplatestructS{templatetypenamestd::enable_if::typef(Tt){return1;};templatetypenamestd::enable_if::typef(Tt){return2;};};intmain(){Ss1;returns1.f(99);}GCC错误:/home/lvv/p/sto/test/t.cc:12:2:error:notypenamed‘type’in‘structenable_if’f(Tt){return2;};^CLANG错误:/home/lvv

对象 vector 上的 C++ remove_if

我有一个对象vector(顺序很重要)(我们称它们为myobj类),我试图一次删除多个对象。classvectorList{vectormyList;};classmyobj{char*myName;intindex;boolm_bMarkedDelete;}我认为最好的方法是标记特定的myobj对象以进行删除,然后在vector上调用myList.remove_if()。但是,我不确定如何为此使用谓词等。我是否应该在对象中创建一个成员变量,让我说我想删除myobj,然后创建一个谓词来检查是否设置了成员变量?如何将谓词实现为vectorList类的一部分?

对象 vector 上的 C++ remove_if

我有一个对象vector(顺序很重要)(我们称它们为myobj类),我试图一次删除多个对象。classvectorList{vectormyList;};classmyobj{char*myName;intindex;boolm_bMarkedDelete;}我认为最好的方法是标记特定的myobj对象以进行删除,然后在vector上调用myList.remove_if()。但是,我不确定如何为此使用谓词等。我是否应该在对象中创建一个成员变量,让我说我想删除myobj,然后创建一个谓词来检查是否设置了成员变量?如何将谓词实现为vectorList类的一部分?

c++ - "if"条件下的变量赋值

我最近刚刚花了一些时间来找出我的代码中的一个由拼写错误引起的错误:if(a=b)代替:if(a==b)我想知道是否有任何特殊情况需要在if语句中为变量赋值,或者如果没有,为什么编译器不抛出警告或错误? 最佳答案 if(Derived*derived=dynamic_cast(base)){//dostuffwith`derived`}虽然这经常被称为反模式(“使用虚拟调度!”),但有时Derived类型具有Base根本没有的功能(并且,因此,不同的功能),这是打开语义差异的好方法。 关于

c++ - "if"条件下的变量赋值

我最近刚刚花了一些时间来找出我的代码中的一个由拼写错误引起的错误:if(a=b)代替:if(a==b)我想知道是否有任何特殊情况需要在if语句中为变量赋值,或者如果没有,为什么编译器不抛出警告或错误? 最佳答案 if(Derived*derived=dynamic_cast(base)){//dostuffwith`derived`}虽然这经常被称为反模式(“使用虚拟调度!”),但有时Derived类型具有Base根本没有的功能(并且,因此,不同的功能),这是打开语义差异的好方法。 关于

c++ find_if lambda

下面的代码有什么问题?如果结构的第一个成员等于0,它应该在结构列表中找到一个元素。编译器提示lambda参数不是谓词类型。#include#include#include#include#includestructS{intS1;intS2;};usingnamespacestd;intmain(){listl;Ss1;s1.S1=0;s1.S2=0;Ss2;s2.S1=1;s2.S2=1;l.push_back(s2);l.push_back(s1);list::iteratorit=find_if(l.begin(),l.end(),[](Ss){returns.S1==0;});

c++ find_if lambda

下面的代码有什么问题?如果结构的第一个成员等于0,它应该在结构列表中找到一个元素。编译器提示lambda参数不是谓词类型。#include#include#include#include#includestructS{intS1;intS2;};usingnamespacestd;intmain(){listl;Ss1;s1.S1=0;s1.S2=0;Ss2;s2.S1=1;s2.S2=1;l.push_back(s2);l.push_back(s1);list::iteratorit=find_if(l.begin(),l.end(),[](Ss){returns.S1==0;});

c++ - 为什么 if constexpr 不会使这个核心常量表达式错误消失?

引用thisquestion.用于初始化constexpr变量y的核心常量表达式格式不正确。这么多是给定的。但是如果我尝试将if变成ifconstexpr:templatevoidfoo(){constexprintx=-1;ifconstexpr(x>=0){constexprinty=1();}错误仍然存​​在。GCC7.2仍然提供:error:rightoperandofshiftexpression'(1但我认为语义检查应该留在丢弃的分支上。通过constexprlambda进行间接处理确实有帮助,但是:templatevoidfoo(){constexprintx=-1;co

c++ - 为什么 if constexpr 不会使这个核心常量表达式错误消失?

引用thisquestion.用于初始化constexpr变量y的核心常量表达式格式不正确。这么多是给定的。但是如果我尝试将if变成ifconstexpr:templatevoidfoo(){constexprintx=-1;ifconstexpr(x>=0){constexprinty=1();}错误仍然存​​在。GCC7.2仍然提供:error:rightoperandofshiftexpression'(1但我认为语义检查应该留在丢弃的分支上。通过constexprlambda进行间接处理确实有帮助,但是:templatevoidfoo(){constexprintx=-1;co