草庐IT

if-cases

全部标签

c++ - if 条件中的逗号运算符

inta=1,b=0;if(a,b)printf("success\n");elseprintf("fail\n");if(b,a)printf("success\n");elseprintf("fail");这是一个cpp文件,我在VisualStudio2010中得到的输出为failsuccess为什么会有这种行为?你能解释一下吗? 最佳答案 http://en.wikipedia.org/wiki/Comma_operator:IntheCandC++programminglanguages,thecommaoperator(

c++ - 完美转发 setter 的正确 `enable_if` 约束是什么?

HerbSutter的回归基础!CppCon上的现代C++基础介绍讨论了传递参数的不同选项,并比较了它们的性能与编写/教学的难易程度。“高级”选项(在所有测试的情况下提供最佳性能,但对于大多数开发人员来说太难编写)是完美的转发,给出的示例(PDF,pg.28):classemployee{std::stringname_;public:template,std::string>::value>>voidset_name(String&&name)noexcept(std::is_nothrow_assignable::value){name_=std::forward(name);}}

c++ - 这个 "if e is a pack, then get a template name, otherwise get a variable name"是否有效?

我尝试构建一个不需要typename或template的案例,但仍会根据给定名称t生成变量或模板是否为函数参数包templatestructA{templatestaticvoidf(int){}};templatestructA{staticconstintf=0;};templateusingtype=int;templatevoidf(Tt){A...)>::f(1);}intmain(){f(1);}以上将引用staticconstint,并进行比较。以下刚好有Tt变成了一个包并制作f引用模板,但GCC也不喜欢templatevoidf(T...t){A...)>::f(1);

c++ - 有没有办法执行 "if (condition) typedef ..."

当且仅当满足编译时条件时,我想执行typedef。如果条件不满足,则根本不执行typedef。这在C++11中可行吗?例子:classA{std::conditional_typedef;//Performs"typedefintmyType1".std::conditional_typedef;//Doesnothingatall.};我正在寻找这个虚构的std::conditional_typedef。 最佳答案 另一种方法是从基类的特化中传递//fooisalightstruct(onlyatypedefornotatall)

c++ - 在 if 条件中声明变量有什么问题?

也许我开始生疏了(最近一直在用Python写东西)。为什么不编译?if((inti=f())==0)没有inti=f()周围的()我得到另一个更合理的错误iisnotbeboolean.但这就是为什么我首先想要括号!我的猜测是使用括号使其成为表达式,并且表达式中不允许声明语句。是这样吗?如果是,它是C++的语法怪癖之一吗?顺便说一句,我实际上是在尝试这样做:if((Mymap::iteratorit=m.find(name))!=m.end())returnit->second; 最佳答案 您可以在C++中的if语句中声明一个变量,

c++ - 如果不这样做,函数如何在新线程上运行 "as if"?

根据C++标准的[futures.async]/3项目符号1,当函数f使用std传递给std::async时::launch::async启动策略,f将“就像在新的执行线程中一样”运行。鉴于f可以做任何事情,包括无限循环和永远阻塞,实现如何提供f在其自己的线程上运行而不实际运行它的行为它自己的线程?也就是说,实现如何利用标准提供的“好像”摆动空间? 最佳答案 查看C++引用中出现的here和here,似乎“好像”的目标是让库实现者有一定程度的自由度。例如,它说asifspawnedbystd::thread(std::forward

c++ - 关于在丢弃的 if constexpr(false) 语句中实例化模板时,编译器之间的行为不一致

我试图了解下面的代码段是否应该根据标准编译。当我尝试使用三个主要编译器的最新版本进行编译时,会出现以下情况:✓Clang(版本7.0.0,带有-std=c++17标志):编译良好;✓GCC(8.2版,带有-std=c++17标志):也可以正常编译;❌MSVC(版本19.16,带有/std:c++17标志):编译器错误(见下文)。出现错误是因为MSVC编译器似乎试图实例化std::optional尽管代码被丢弃。GCC和Clang似乎没有这样做。标准是否明确定义了在这种情况下应该发生什么?#include#includetemplatestructBar{voidfoo(Args...a

c++ - C++0x 中的 disable_if 在哪里?

Boost同时拥有enable_if和disable_if,但C++0x似乎缺少后者。为什么它被遗漏了?C++0x中是否有元编程工具允许我根据enable_if构建disable_if?哦,我刚刚注意到std::enable_if基本上是boost::enable_if_c,而没有boost::enable_if在C++0x中。 最佳答案 冒着看起来愚蠢的风险,只需在enable_if的bool模板参数中使用!expression而不是expression以使其表现得像disable_if?当然,如果这个想法可行,您可以扩展它以编写

c++ - 没有花括号的 "if" block 使后续的 "else if"嵌套

AFAIK,如果没有提供“if”block,则花括号内只考虑1个语句。例如if(..)statement_1;statement_2;不考虑选项卡,在ifblock内只考虑statement_1。以下代码与此不符:intmain(){if(false)//outer-ifif(false)//nested-ifcout上面的代码不打印任何东西。它应该打印出"true"。它显示为elseif自动嵌套在outerifblock内。g++-Wall发出警告,但这不是这里的问题。放置花括号后,一切都会按预期进行。为什么会有如此不同的行为?[GCC演示:withoutbraces和withbra

c++ - if/else 在什么阶段变得比 switch case 更好?可以?

我可以总结一下,Switchcase由实现定义,但主要定义为跳转表切换大小写使代码更具可读性Switch比if/elseif(?)快考虑一个我有300+个switch案例的案例。我知道这个场景中的if/elseif会一团糟。但我想知道switch案例在这样的场景?它是否可扩展,即无论存在多少情况,它仍然比if/else相对快?既然是执行定义了我如何弄清楚我的编译器是如何实现它的?最重要的是,除了实际编写代码和使用分析器之外,我该如何进行if/elseif-switch比较?我尝试使用gcc4.8.1-S开关编译一个带有switchcase的小型.c文件,它看起来像是创建了一个跳转表.我