草庐IT

if-cases

全部标签

c++ - 如何使用 enable_if 根据类的模板参数启用成员函数

在代码中:templatestructis_builtin{enum{value=0};};templatestructis_builtin{enum{value=1};};templatestructis_builtin{enum{value=1};};templatestructis_builtin{enum{value=1};};templatestructMy{typenameenable_if::value,void>::typef(Targ){std::cout::value,void>::typef(Targ){std::coutm;Myma;m.f(1);ma.f(a)

c++ - enable_if 和转换运算符?

有没有机会将enable_if与类型转换运算符一起使用?看起来很棘手,因为返回类型和参数列表都是隐式的。 最佳答案 根据我所做的小研究(并忽略Johannes的c++0x评论),我的回答是这取决于您想要什么enable_if为了。如果要转换操作为T存在与否来自类型T那么似乎答案是否定的,在C++03中没有办法(正如Ugo所说)。但如果您需要enable_if根据T的类型更改运算符(operator)的行为那么是的,有一种解决方法是调用启用的辅助函数(称为to,正如Matthieu建议的那样)。#include#include#inc

c++ - unordered_map : what to return if key is not in map?

作为这个问题的前言,我不得不说我是一名Java程序员,因此比C++更习惯Java中的Maps语义。在Java中,当在Map中查找键时,返回null是很常见的。我正在将我们的一些代码翻译成c++,并尝试在与unordered_map交互时找到c++的处理方式。具体来说,我有一个包含unordered_map的类。我没有将映射直接暴露给客户端代码,而是有2个包装函数,一个用于将键/值对放入映射中,另一个用于检索指定键的值,即:voidset_tag_value(stringtag,stringvalue);string&get_tag_value(stringtag);如果我使用unord

c++ - "if(T t = ...) { } else return t;"的优雅方式?

这个“成语”有没有更好的办法?if(States=loadSomething()){}elsereturns;换句话说,我想做一些事情,它可能会返回错误(带有消息)或成功状态,如果有错误我想返回它。这可能会变得非常重复,所以我想缩短它。例如if(States=loadFoobar(&loadPointer,&results)){}elsereturns;if(States=loadBaz(&loadPointer,&results)){}elsereturns;if(States=loadBuz(&loadPointer,&results)){}elsereturns;这不能使用我喜欢

由于 if 语句导致 C++ 大量性能损失

我在4个线程中运行while循环,在循环中我正在评估函数并递增计数器。while(1){intfitness=EnergyFunction::evaluate(sequence);mutex.lock();counter++;mutex.unlock();}当我运行这个循环时,正如我在4个运行线程中所说的那样,我每秒得到大约20000000次评估。while(1){if(dist(mt)==0){sequence[distDim(mt)]=-1;}else{sequence[distDim(mt)]=1;}intfitness=EnergyFunction::evaluate(sequ

STL - STL count_if 的标准谓词

我正在使用STL函数count_if来计算所有正值在doublevector中。例如我的代码是这样的:vectorArray(1,1.0)Array.push_back(-1.0);Array.push_back(1.0);cout其中函数isPositive定义为boolisPositive(doublex){return(x>0);}以下代码将返回2。有没有办法做到以上几点不写我自己的函数isPositive?有没有内置的我可以使用的功能?谢谢! 最佳答案 std::count_if(v.begin(),v.end(),std:

c++ - 为什么 std::count(_if) 返回 iterator::difference_type 而不是 size_t?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhydoestheC++standardalgorithm“count”returnaptrdiff_tinsteadofsize_t?标准C++中有std::count/std::count_if算法。templatetypenameiterator_traits::difference_typecount(InputIteratorfirst,InputIteratorlast,constT&value);templatetypenameiterator_traits::difference_typec

c++ - 如何在 if-else 语句中使用 C++20 的可能/不太可能属性

这个问题是关于C++20的[[likely]]/[[unlikely]]功能,而不是编译器定义的宏。本文档(cppreference)仅给出了将它们应用于switch-case语句的示例。此switch-case示例与我的编译器(g++-7.2)完美编译,因此我假设编译器已实现此功能,尽管它尚未在当前C++标准中正式引入。但是当我像这样使用它们时:if(condition)[[likely]]{...}else{...},我得到了一个警告:"warning:attributesatthebeginningofstatementareignored[-Wattributes]".那么我应

c++ - C++ 中的 Switch/Case 语句

关于下面C++代码中的switch/case语句:“Case1”显然是错误的,那么它如何/为什么进入do-while循环?#includeusingnamespacestd;intmain(){inttest=4;switch(test){case1:do{case2:test++;case3:test++;case4:cout0);cout 最佳答案 这是Duff'sDevice,这是一种古老而巧妙的跳入循环中间的技术。 关于c++-C++中的Switch/Case语句,我们在Stac

c++ - 可变参数模板函数 : specialize head/tail and empty base case

我想在一个类中有一个可变参数模板函数。可变参数模板参数是应该以类似循环的方式处理的字符。所以我想像在haskell中那样编写它,头/尾拆分列表,直到达到基本情况(空列表)。作为一个例子,我们只计算给定参数的数量(只是一个最小的例子)。我想出了以下代码:structMyClass{templatestaticintcount();};templateintMyClass::count(){return0;}templateintMyClass::count(){return1+count();}但是,这个doesn'tseemtowork:prog.cpp:12:35:error:fun