草庐IT

条件分支

全部标签

c++ - 有条件地使初始化列表中的 shared_ptr 为 null

我处于这样一种情况,我需要使shared_ptr为null或包含类Bar的实例。下面的方法不起作用,因为Bar和nullptr不是同一类型。怎样才能做到这一点?classBar{};classFoo{private:shared_ptrb;public:Foo():b(true?Bar():nullptr){}}; 最佳答案 b(true?std::make_shared():nullptr) 关于c++-有条件地使初始化列表中的shared_ptr为null,我们在StackOverf

c++ - 加载或存储可以在有条件之前重新排序吗?

std::atomic_uint64_twriting_{0};std::atomic_uint64_treading_{0};std::arraystorage_{};booltry_enqueue(typet)noexcept{conststd::uint64_twriting{writing_.load(std::memory_order::memory_order_relaxed)};constautolast_read{reading_.load(std::memory_order::memory_order_relaxed)};if(writing-last_read在上面

c++ - 条件变量

我注意到当我对条件变量执行等待操作时,它会立即返回。结果是,当执行以下虚拟代码时,循环中100%的CPU被使用:intmain(void){boost::condition_variablecond;boost::mutexmut;booldata_ready=false;boost::unique_locklock(mut);while(!data_ready){cond.wait(lock);}return1;我希望调用cond.wait(lock)将线程置于不消耗任何CPU的状态,但事实并非如此。那么问题出在哪里呢?我从boost文档中获取了上面的代码。(我使用的是boost1.

c++ - 根据日志级别支持条件函数调用的 C/C++ 日志记录工具

对现有C/C++日志记录解决方案的一些调查表明,Pantheios在我的情况下可能是最好的,如果禁用日志记录,这是最低的开销。所有的记录器似乎都支持一种打印日志消息。但是,在我的例子中,如果禁用日志记录,我应该避免调用函数(因为它非常昂贵)。目前我使用一个非常简单的日志记录设置#ifdefDEBUG_L1cout它满足了我的需求(目前),因为如果禁用日志记录,我将支付零开销。然而,代码很快看起来很难看,而且不是很灵活。这应该用C++记录器来实现。如前所述,printBuffer()的函数体非常昂贵。如果关闭日志记录可以避免调用它,那就太好了。是否可以声明整个函数调用仅在高于特定日志级别

c++ - malloc 失败条件

我正在复习c,重做一些旧的练习,并在运行此代码段时得到一些不寻常的结果(我知道它泄漏但想了解系统允许多少..)#include#includeintmain(intargc,char*argv[]){void*page=0;intindex;index=0;while(1){page=malloc(1073741824);//1GBif(!page)break;++index;}printf("memoryfailedat%d\n",index);return0;}我实际上得到:memoryfailedat131070这表明它认为它分配了131070x1GB内存(大量泄漏)我之前知道m

c++ - 为什么预分配函数指针的性能比分支差?

我有一个带有enum成员变量的类。其中一个成员函数基于此enum的行为,因此作为“可能的”优化,我将两种不同的行为作为两个不同的函数,并为类提供了一个在构造时设置的成员函数指针.我模拟了这样的情况:enumcatMode{MODE_A,MODE_B};structcat{cat(catModemode):stamp_(0),mode_(mode){}voidupdate(){stamp_=(mode_==MODE_A)?funcA():funcB();}uint64_tstamp_;catModemode_;};structcat2{cat2(catModemode):stamp_(0

C++ 构造如果满足条件

我有一个设计问题,其实并不复杂,但我想找到一种优雅的方法来解决它。我想到了这个:问题:我有一个A类初始化并保存B的集合B只是一个接口(interface),必须实现(所以我们有类C、D、E、..)。在构造函数A中接收到一堆数据集,并且必须在给定每个数据集的情况下初始化B的一些(还有许多相同或不同类的不同实例)。我希望A不知道B的任何实现。我有几个可行的解决方案,但我在考虑一种“构造函数中的委托(delegate)”。例如:1.foreachdataset,ds2.foreachimplementationofB,bi3.trytoinstantiatebi(ds)4.ifsuccess

c++ - 典型现代 CPU 的分支预测缓冲区有多大?

我正在处理的应用程序有大量的if语句,其特征是在任何一次执行中,90%的时间只有一个分支被执行。现在,我可以通过执行以下操作来测试分支预测对特定CPU的单个if语句的影响:-#include#includeusingnamespacestd;intmain(){inta;cin>>a;srand(a);intb;longcount=0;for(inti=0;i15)//Thiscanbechangedtogetstatisticsfordifferent%-agescount+=(b+10);}}cout我的问题是,是否有一种方法可以在给定CPU的实际大型应用程序中使用多个if语句测试

leetcode77组合 剪枝条件详细解释

题目:77.组合-力扣(LeetCode)题解:力扣(LeetCode)官网-全球极客挚爱的技术成长平台思路来自代码随想录:带你学透回溯算法-组合问题(对应力扣题目:77.组合)|回溯法精讲!_哔哩哔哩_bilibili带你学透回溯算法-组合问题的剪枝操作(对应力扣题目:77.组合)|回溯法精讲!_哔哩哔哩_bilibili对其中的剪枝条件做详细解释剪枝部分代码为for(inti=index;i剪枝条件为i1.i是起到一个遍历的作用,未剪枝之前,它的作用是从【i,n】这个区间里遍历,找到继续加入到path里的数值2.给出n,k求【1,n】中,大小为k(元素个数为k)的集合3.这个集合一定不是正

c++ - 使条件 isdigit()

先看我的代码:#‎include‬#includeusingnamespacestd;intmain(){inta,b;cout>a>>b;if(isdigit(a))if(isdigit(b))cout所以当我们输入一些东西时,只输出空格。如果用户点击非数字或任何Alpha,我想做的是打印程序应该显示无效的字符串,或者如果用户点击任何数字,它必须显示两位数字的总和 最佳答案 由于您正在读入int变量,因此您输入的任何内容都必须是整数,否则输入运算符将失败。如果你想读取字符并检查它们是否是数字,你应该读入char变量,然后你需要在对