草庐IT

$C指针

全部标签

指针的 C++ 模板特化?

我读了《C++Templates-theCompleteGuide》一书,学习了指针的模板特化。(可能是我对这部分书的理解有误)(1)这是我的简单模板:#includetemplatevoidFunction(constT&a){std::cout:"voidFunction(constT*a){std::cout:"我使用的是ubuntu16.04x64,g++5.3,编译器报告:$g++main.cpp-omain.exemain.cpp:10:29:error:non-typepartialspecialization‘Function’isnotallowedvoidFunct

c++ - 在 C++11 智能指针中存储 std::thread

在C++11及更高版本中,像这样直接将std::thread存储为类的成员时,有什么优点或缺点:std::threadmy_thread;与像这样将std::shared_ptr或std::unique_ptr存储到线程相反:std::shared_ptrmy_thread_ptr;是否有任何代码选项比其他选项更好?或者没关系,只需2种不同的方式来处理线程对象。 最佳答案 使用指针(或智能指针)成员可能有一些不太常见的原因,但对于常见用法,似乎是std::thread要么不适用,要么本身就足够灵活:我们可能希望更好地控制对象的生命周

c++ - 使用智能指针包装 C 创建和销毁函数

我有一些处理对象创建和销毁的CAPI,它提供了:createObject(...)和destroy(...)。我想把它包装成一些更现代的构造/销毁机制,并将它们与智能指针一起使用。我担心在某个时候我会忘记销毁对象,或者会发生一些异常。我知道shared_ptr的自定义删除函数,但我不能显式调用new,因为createOjbect函数处理初始化。我可以在这种情况下使用STL智能指针吗?在这种情况下,我是否必须从头开始实现一个在构造函数中初始化、在析构函数中析构和引用计数的类? 最佳答案 std::shared_ptr完全有能力使用cu

ARM PAC指针认证的侧信道攻击——PACMAN安全漏洞

目录Q1.PACMAN论文的内容是什么?Q2.Arm处理器是否存在漏洞?Q3.受Arm合作伙伴架构许可设计的处理器实现是否受到影响?Q4.Cortex-M85受到影响吗?

c++ - if、switch 和函数指针速度比较

我正在构建一个小型解释器,因此我想测试ifs、switch和函数指针相互比较的速度。if有19个elseifs比有2​​0个case的switch稍快,而函数指针(20个函数指针的数组)比前两个慢得多...我预计结果会完全相反,谁能解释一下? 最佳答案 在现代处理器上,其中很多都归结为分支预测。虽然switch语句可以实现为一个跳转表,它执行代码的任何分支所花费的时间大致相同,但它通常也是相当不可预测的——从字面上看;分支预测器在预测采用哪个分支方面通常做得很差,这意味着很有可能出现管道泡沫(通常大约浪费15个周期左右)。if语句可

c++ - 如何获得指向 shared_ptr 的指针?

我现在正在破解一个旧的C代码,试着让它更像C++/Boost风格:有一个资源分配函数如下所示:my_src_type*src;my_src_create(&src,ctx,topic,handle_src_event,NULL,NULL);我尝试用shared_ptr包装src:shared_ptrpSrc;刚才忘记说了。我需要循环执行此操作std::map>dict;my_src_type*raw_ptr;BOOST_FOREACH(std::stringtopic,all_topics){my_src_create(&raw_ptr,ctx,topic,handle_src_eve

c++ - 使用基类指针访问派生类成员

我正在用C++制作一个简单的控制台游戏我想知道我是否可以在使用指向基类(“实体”)的指针时访问“entPlayer”类的成员:classEntity{public:voidsetId(intid){Id=id;}intgetId(){returnId;}protected:intId;};classentPlayer:publicEntity{stringName;public:voidsetName(stringname){Name=name;}stringgetName(){returnName;}};Entity*createEntity(stringType){Entity*E

c++ - 苹果、橘子和指向最派生的 c++ 类的指针

假设我有一堆水果:classFruit{...};classApple:publicFruit{...};classOrange:publicFruit{...};以及一些对所述水果进行​​操作的多态函数:voidEat(Fruit*f,Pesticide*p){...}voidEat(Apple*f,Pesticide*p){ingest(f,p);}voidEat(Orange*f,Pesticide*p){peel(f,p);ingest(f,p);}好的,等等。停在那儿。请注意,任何理智的人都会将Eat()设为Fruit类的虚拟成员函数。但这不是一个选择,因为我不是一个理智的人

c++ - 在具有指针参数的模板实例化之间进行选择

看下面的测试代码:templatestructWrap{};templateinlinevoidfun(T*&Int)//**choice1**{}templateinlinevoidfun(Wrap*&Int)//**choice2**{}intmain(){inti=6;fun((char*&)(i));//**call1**fun((Wrap*&)(i));//**call2**}当我在linuxg++中运行此代码时,它按预期运行。当使用char*&调用fun()时,它会直接调用选项1的函数。但是,当我们使用Wrap*&调用fun()并调用选项2时,我很感兴趣。即使选项1和2对于

c++ - 为什么我们需要在运行时使用函数指针调用这些函数。我们也可以直接调用他们

阅读了一些有关函数指针和回调的内容后,我无法理解其基本用途。对我来说,它看起来就像不是直接调用函数,而是使用指向该函数的指针来调用它。谁能解释一下回调和函数指针?为什么我们使用函数指针时会发生回调,因为我们似乎只是通过指向它的指针来调用函数而不是直接调用?谢谢ps:这里有一些关于回调和函数指针的问题,但它们不足以解释我的问题。 最佳答案 什么是Callbak函数?简单来说,回调函数是一种不会被程序员显式调用的函数。相反,有一些机制不断等待事件发生,它会调用选定的函数以响应特定事件。当操作(函数)可能需要很长时间执行并且函数的调用者不