草庐IT

if-cases

全部标签

c++ - 有if-else,有没有Neither Nor语句?

有没有neitherAnorB语法? 最佳答案 哦......你想要“不是”关键字?VBaddsAin'tKeyword(Newswire8-19-2004)MicrosofthasannouncedthatVisualBasicwilladdthe"Ain't"keywordtothelanguage.AccordingtoasourceontheVB.NETteam"WithVB,wewantthelanguagetoworkthewayyouthink.Extensiveusabilitystudieshavedemonstr

c++ - 如何在 C++ 编译时应用 if

我正在尝试编写一个通用的static_for实现,它可以接受边界、增量函数和比较函数来运行循环。我一直在使用这个结构和递增1的简单循环。在这种情况下,很容易通过简单地专注于IDX&END相等来停止循环展开。然而,当增量可以是任意整数时,不能保证IDX&END总是相等的。if条件仅在运行时评估。在下面的代码片段中,我试图专注于停止递归的std::false_type。integral_constant是通过评估std::less函数(可以由用户替换为任何其他评估)构造的。不幸的是,此比较器函数也仅在运行时求值,因此编译器失败。有人可以建议如何让它发挥作用吗?注意:使用C++11。temp

c++ - "default"switch case 是否会影响跳转表优化?

在我的代码中,我习惯于编写包含如下断言的回退默认情况,以防止我在语义发生变化时忘记更新开关switch(mode){caseModeA:...;caseModeB:...;case../*manyofthem...*/default:{assert(0&&"Unknownmode!");returnADummyValue();}};现在我想知道人为回退检查默认情况是否会干扰跳表生成?想象一下“ModeA”和“ModeB”等是连续的,因此编译器可以优化成一个表。由于“默认”情况包含一个实际的“返回”语句(因为断言将在Release模式下消失并且编译器将提示缺少返回语句),编译器似乎不太可

c++ - `std::enable_if` 是函数指针——怎么样?

如果用户将函数指针作为参数传递,我想使用SFINAE启用特定模板。我用谷歌搜索但一无所获-我也尝试查看文档,但找不到任何类似于is_function_ptr的内容.函数指针,我指的是全局函数指针,比如TReturn(*)(TArgs...). 最佳答案 下面是确定某物是否为函数指针的类型特征和几个测试用例。请注意,要测试某物是否是函数指针,您需要测试是否std::is_pointer::value是true如果std::is_function::value是true其中T是P删除指针。下面的代码就是这样做的:#include#inc

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++ - 使用 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这样的算术表达