草庐IT

static_if

全部标签

c++ - 哪个更快?函数调用还是条件 if 语句?

在回答这个问题之前,请考虑分支预测。在某些情况下,我可以在函数指针的帮助下将条件语句替换为对函数的调用。类似这样的事情。(对于类似类型的senario,您可以考虑基于组件的编程而不是继承)classShape{floatArea(){if(type==SQUARE){returnlength*length;}elseif(type==RECTANGLE){returnlength*breadth;}}}同一个类可以这样写。classShape{voidSetAreaFunction(void*funcptr)//thisfunctionisusedtosetthecurrentArea

c++ - std::static_pointer_cast 与 static_cast<std::shared_ptr<A>>

我有一个类层次结构,其中B源自A像这样:classA:publicstd::enable_shared_from_this{};classB:publicA{voidf(){//thecodebelowcompilesstd::shared_ptrcopyOfThis=std::static_pointer_cast(shared_from_this());//thecodebelowdoesnotstd::shared_ptrcopyOfThis=static_cast>(std::make_shared(shared_from_this()));}};所以实际上我想了解为什么我不能

c++ - NULL 指针与 static_cast 的兼容性

Q1。为什么在static_cast中使用NULL指针会导致崩溃,而dynamic_cast和reinterpret_cast会返回NULL指针?问题发生在类似于下面给出的方法中:voidA::SetEntity(B*pEntity,intiMyEntityType){switch(iMyEntityType){caseENTITY1:{Set1(static_cast(pEntity));return;}caseENTITY2:{Set2(static_cast(pEntity));return;}caseENTITY3:{Set3(static_cast(pEntity));ret

c++ - If-else-if 与 map

假设我有这样一个if/else-if链:if(x.GetId()==1){}elseif(x.GetId()==2){}//...50moreelseifstatements我想知道的是,如果我保留一张map,它在性能方面会不会更好?(假设键是整数) 最佳答案 map(通常)是使用红黑树实现的,它提供O(logN)查找,因为树始终保持平衡。您的if语句线性列表将是O(N)最坏的情况。所以,是的,map的查找速度会快得多。许多人建议使用switch语句,这对您来说可能不会更快,具体取决于您的实际if语句。编译器有时可以通过使用O(1)

c++ - static_if 会弃用模板特化吗?

像这样的一些常用模板特化:templateclassC{voidcommon(){...}voidf2=delete;};templateclassC{voidcommon(){...}voidf1(){...}};可以用static_if表示作为:templateclassC{voidcommon(){...}static_if(std::is_same::value){voidf1(){...}}else{voidf2()=delete;}}这些是直接竞争的功能吗?模板特化可以做static_if做不到的事情吗?看起来static_if可以做模板特化可以做的一切,甚至更多。顺便说一

c++ - 未解析的外部符号 "private: static int Math::result"

这个问题在这里已经有了答案:Whatisanundefinedreference/unresolvedexternalsymbolerrorandhowdoIfixit?(38个答案)关闭8年前。这是我的类定义:#includeusingnamespacestd;classMath{private:staticintresult;public:staticintadd(inta,intb){result=a+b;returnresult;};};这是主要的:#include#include"Amin.cpp"usingnamespacestd;intmain(){Math::add(2

c++ - 关于带有函数和数据的static关键字的问题

我有几个关于C++中的static关键字的问题(可能还有其他语言。)将函数声明为静态的目的是什么?voidstaticfoo(intaNumber){...}静态内联函数怎么样?voidstaticinlinefoo(intaNumber){...}在函数中使用static关键字有什么好处吗?这些好处是否也适用于类函数?我意识到某些数据类型(如结构和数组)在使用较旧的编译器进行编译时必须是静态的,但是在使用新的ANSI-C++编译器(如MSVC++2008)时有什么意义吗?我知道在循环内使用静态变量可以通过将数据保存在内存中而不是在每次循环迭代时重新分配内存来节省时间,但是当变量只声明

C++ std::set::erase 与 std::remove_if

此代码有VisualStudioerrorC3892。如果我将std::set更改为std::vector-它有效。std::seta;a.erase(std::remove_if(a.begin(),a.end(),[](intitem){returnitem==10;}),a.end());怎么了?为什么我不能将std::remove_if与std::set一起使用? 最佳答案 您不能使用std::remove_if()具有const的序列部分。std::set的序列元素由Tconst组成对象。事实上,我们昨天在标准C++委员会

c++ - 没有堆的 static const std::vector<char> 初始化?

假设我想要一个无符号字符的std::vector。它是用初始化列表(这是C++11)初始化的,永远不会改变。我想避免任何堆分配,即使在启动时也是如此,并让整个vector像const字符串一样存在于数据段中。那可能吗?IE:staticconstvectorv{0x1,0x2,0x3,0x0,0x5};(这是一个有点学术性的问题;我知道为此使用C数组并不难。) 最佳答案 为什么不直接使用std::array为此?staticconststd::arrayv{0x1,0x2,0x3,0x0,0x5};这避免了任何动态分配,因为std:

c++ - 用于遍历继承层次结构的 Static_cast 与 dynamic_cast

我看到一本关于C++的书提到使用静态转换在继承层次结构中导航比使用动态转换更有效。例子:#include#includeusingnamespacestd;classShape{public:virtual~Shape(){};};classCircle:publicShape{};classSquare:publicShape{};classOther{};intmain(){Circlec;Shape*s=&c;//Upcast:normalandOK//Moreexplicitbutunnecessary:s=static_cast(&c);//(Sinceupcastingis