草庐IT

enable_if_c

全部标签

c++ - 在 C++ 中,使用 std::min 或 if 分支来限制值是否更好?

编程中一种非常常见的模式是在某种更新后将值设置为最大值。我想知道的是,以下两段代码之间是否有区别,是否应该首选:value+=increment;value=std::min(value,valueMax);对value+=increment;if(value>valueMax)value=valueMax;我的想法是,这归结为CPU是否具有获取两个值并产生最小值的指令。如果是这样,对std::min的调用应该导致该指令并避免不必要的分支。如果没有,第二个版本会避免在value我不太擅长这种事情,但我敢肯定有老派的组装黑客会知道这一点。我问他们:哪个更好?

c++ - 关于如何识别 Rvalue 或 Lvalue 引用和 if-it-has-a-name 规则

我正在阅读ThomasBecker的article关于右值引用及其使用。在那里,他定义了他所谓的if-it-has-a-name规则:Thingsthataredeclaredasrvaluereferencecanbelvaluesorrvalues.Thedistinguishingcriterionis:ifithasaname,thenitisanlvalue.Otherwise,itisanrvalue.这对我来说听起来很合理。它还清楚地标识了右值引用的右值性。我的问题是:你同意这个规则吗?如果没有,您能否举一个可能违反此规则的示例?如果没有违反这条规则。我们可以使用此规则来

c++ - do while 循环中的 if 语句以 yes 或 no 结尾

这个问题在这里已经有了答案:cinandgetlineskippinginput[duplicate](4个回答)关闭4年前。我是编码新手,我正在尝试使用嵌套的if语句执行一个长的dowhile循环,但我在让我的循环实际运行时遇到问题环形。我没有直接在我的项目上获得帮助,它有很长的代码,我做了一个简单的喜欢它的版本。它也不会循环。它将到达最后并询问用户是否要再试一次,但是当输入“y”时,它会忽略if语句。#include#includeusingnamespacestd;intmain(){stringsodaChoice;charanswer='n';do{cout>answer;}

c++ - 如果有 constexpr if 语句,为什么没有其他 constexpr 语句呢?

已结束。此问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎与helpcenter中定义的范围内的编程无关。.关闭5年前。Improvethisquestion是否有任何理由只将ifconstexpr包含在C++17中?我可以这样做:templateconstexprintfib(){ifconstexpr(N==1||N==2){return1;}else{returnfib()+fib();}}为什么C++委员会也没有考虑switchconstexpr?templateconstexprintfib(){switchconstexpr(N){c

c++ - if 语句中的结构化绑定(bind)初始化程序无法编译

阅读C++17,现在可以在if语句中进行多次初始化:if(intx=func(),y=func2();x>0&&y>0){}不错,还结合了C++17中的另一个特性,结构化绑定(bind):if(auto[iter,success]=set.insert("Hello");success){}else{}但是结合这两个功能在VisualStudio2017中无法编译。if(auto[iter,success]=set.insert("Hello"),[iter2,success2]=set.insert("Foo");success&&success2){}else{}missing';

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++ - 为什么 enable_shared_from_this 有一个非虚拟析构函数?

我有一个宠物项目,我用它来试验C++11的新特性。虽然我有C方面的经验,但我对C++还是很陌生。为了训练自己掌握最佳实践(除了大量阅读),我启用了一些严格的编译器参数(使用GCC4.4.1):-std=c++0x-Werror-Wall-Winline-Weffc++-pedantic-errors这对我来说效果很好。到现在为止,我已经能够解决所有的障碍。但是,我需要enable_shared_from_this,这给我带来了问题。编译我的代码(可能由-Weffc++触发)时,我收到以下警告(在我的情况下是错误):baseclass‘classstd::enable_shared_fr