草庐IT

if-else-statement

全部标签

c++ - 丢弃分支中的嵌套 constexpr-if 语句是否仍被评估?

在我看来,另一个constexpr-if语句的丢弃分支内的constexpr-if语句在MSVC(版本15.7.3)中被评估。考虑以下代码:#include#includetemplateinttest(){ifconstexpr(I!=0){return0;}else{//Thisbranchisdiscarded,butitseemsthattheconstexpr-ifbelowisstillevaulated?ifconstexpr(std::is_same_v>>){//someconstexprcheckthatisvalidonlywhenI==0return1;}els

C++ 模板 : how to determine if a type is suitable for subclassing

假设我有一些模板类取决于类型T.T几乎可以是任何东西:int,int*,pair或structlol;它不能是void,引用或任何cv合格的东西。对于一些优化,我需要知道我是否可以子类化T.所以,我需要一些特征类型is_subclassable,确定为基本特征的逻辑组合或通过一些SFINAE技巧。在原来的例子中,int和int*不可子类化,而pair和structlol是。编辑:正如litb在下面指出的,union也不可子类化并且T也可以是union类型。如何编写我需要的特征类型? 最佳答案 你要判断是否是非union类。我不知道有

c++ - std::remove 和 std::remove_if 设计的稳定性是否失败?

最近(从一个SO评论)我了解到std::remove和std:remove_if是稳定的。我认为这是一个糟糕的设计选择,因为它阻止了某些优化,我错了吗?想象一下删除1Mstd::vector的第一个和第五个元素。因为稳定性,我们不能用swap来实现remove。相反,我们必须移动每个剩余的元素。:(如果我们不受稳定性的限制,我们可以(对于RA和BD迭代器)实际上有2个迭代器,一个在前面,第二个在后面,然后使用交换来结束要删除的项目。我相信聪明的人可能会做得更好。我的问题是一般性的,而不是我正在谈论的特定优化。编辑:请注意,C++宣传零开销原则,并且还有std::sort和std::st

c++ - 为什么这有效 : C++ last statement as result of expression

这个问题在这里已经有了答案:Arecompoundstatements(blocks)surroundedbyparensexpressionsinANSIC?(2个答案)Warning"UseofGNUstatementexpressionextension"(4个答案)关闭6年前。我在驱动程序实现中发现了奇怪的宏,我无法向自己解释。简化的例子是:cout它将输出10。但是为什么expression变成了右值呢?它似乎适用于C和C++。有人可以解释一下吗?指向关键字和引用会很棒。

c++ - 使用 std::enable_if 作为模板时的默认模板参数。 param.: 为什么可以使用两个仅在 enable_if 参数上不同的模板函数?

在languagereferenceofstd::enable_ifatcppreference包括以下注释NotesAcommonmistakeistodeclaretwofunctiontemplatesthatdifferonlyintheirdefaulttemplatearguments.Thisisillegalbecausedefaulttemplateargumentsarenotpartoffunctiontemplate'ssignature,anddeclaringtwodifferentfunctiontemplateswiththesamesignaturei

c++ - 如何重构这个结构,if-else-if-else-if * 100

有一些讨厌的遗留代码。std::stringxxx=GetCommand();//get"CommandX";if(xxx=="Command1"){returnnewCommand1();}elseif(xxx=="Command2"){returnnewCommand2();}...elseif(xxx=="Command100"){returnnewCommand100();}我想改进这个代码结构。有太多的比较。所以我把它们放到map上。for(inti=0;i但是如果有新的命令,这种方式每次都必须做额外的功能。是的,功能可能是合理的。但是所有的函数都是returnnewComm

C++ 'overloading' if() 语句

是否可以更改if()的行为以便:classFoo{intx;};Foofoo;if(foo)仅当x的值不为零时才继续?或者……将用户定义的类型显式转换为int是否可行/这是否是一种合适的方法?或者……是否最好执行类似if(foo.getX())的操作? 最佳答案 您可以通过定义operatorbool()将您的对象转换为bool值:explicitoperatorbool()const{returnfoo.getX();}explicit关键字防止从Foo到bool的隐式转换。例如,如果您不小心将foo放在像foo+1这样的算术表达

Windows bat 脚本 : how to judge if a file exists?

这个问题在这里已经有了答案:Howtoverifyifafileexistsinabatchfile?(3个答案)关闭8年前。伪代码:iffileexists:doxxxxdoneelse:doxxxxdone

windows - 批处理脚本 - 'If Statements' 中的通配符

我正在编写一个批处理脚本,其中我需要在if语句中使用通配符来将变量与字符串匹配。如果匹配,程序将走得更远。if"!_var!"=="str*"(--SOMECOMMANDS--)这是我用过的语法,但我发现它根本行不通。 最佳答案 echo%var%|findstr/b"str">nul&&(echoyessomemorecommands)||(echonosomemorecommands)寻找(/b=开头的)str,(不写入屏幕>nul),如果找到(&&)做某事,如果找不到(||)做另一件事。您还可以添加/i使其不区分大小写。

python if语句总是

这个问题在这里已经有了答案:Else,elif,ifproblemsinPython(2个答案)关闭9年前。所以,我正在用Python构建一个简单的游戏,以便更熟悉这门语言,如果之前有人问过这个问题,我找不到搜索方法。:P无论如何,当这个代码块执行时,我的“位置”总是以.y+10结束。我已经重新排列并检查了几件事,但感觉我遗漏了我通常使用switch语句处理的非常基本的部分mv=input('N,S,E,W?')ifmv=='N'or'n':Me.Position.Y+=10elifmv=='E'or'e':Me.Position.X+=10elifmv=='W'or'w':Me.Po