草庐IT

$双指针

全部标签

c++ - 我可以像 C# 的 Action 一样使用 C++ 函数指针吗?

在C++中,我第一次遇到函数指针。我试图用它来使它类似于C#中的Action和Delegate。但是,在声明函数指针时,需要指定函数所在类的类型。例如)void(A::*F)();我可以使用可以存储任何类的成员函数的函数指针吗?一般情况下,函数指针的使用如下面的代码所示。classA{public:voidAF(){cout我想像下面的代码一样使用它。这可能吗?还是有别的东西可以代替函数指针?classA{public:voidAF(){cout我通过答案解决了问题。谢谢!#include#includeclassA{public:voidAF(){std::coutBF;};intm

c++ - 在定义明确的 C++ 中,从引用中获取的指针是否可以为空?

这个问题的动机是clang和gcc对检查指针值与nullptr的不平衡处理。对于this,它们都发出警告,但对于通过在对象上使用address-of运算符获取的指针,它们保持安静。我很确定这样的指针应该始终有效,因为我们遇到过错误,因为现代编译器从快乐的90年代实际触发的地方删除了对c++代码的此类检查。令我困惑的是为什么编译器在一般情况下保持安静。if是否有可能以某种方式触发,或者这只是两个主要编译器的设计决定?在我开始编写补丁或窃听编译器开发人员之前,我想以确保我没有遗漏任何东西。Toyexample:#includeclassA{voidf(){if(!this){std::co

c++ - 在 C++ 中,我可以在其范围之外定义一个指向私有(private)类成员的指针吗?

考虑:classC{private:classT{inta,b;};};C::T*p;正如预期的那样,这会产生一个编译错误,指出C::T在第6行的上下文中是私有(private)的。现在将其更改为指向成员的指针:classC{private:classT{inta,b;};};intC::T::*p;这一次,gcc3.2.3版仍然发出同样的提示,但gcc3.4.3版让它通过了。根据标准,哪种行为是正确的? 最佳答案 由于T除了类C本身之外的任何地方都是不可见的,我无法想象它会被允许。在Comau上试过这个,他告诉我同样的事情。可悲的

c++ - 将新成员函数添加到 d 指针类会破坏二进制兼容性吗?

将新成员函数添加到d指针类定义中会破坏二进制兼容性吗?例如,与原始定义相比,下面的新定义是否会破坏二进制兼容性?(附带问题,是否有工具可以告诉我新的.so与旧的.so相比是否破坏了二进制兼容性?如果没有,我该如何手动检查?)原文:#ifndef__TESTBC_H__#define__TESTBC_H__classAPrivate;classA{public:intget(){d->update();return_d->get();}private:APrivate*_d;};classAPrivate{public:intget(){return_val;}voidupdate(){

c++ - 从同一个指针构造两个 shared_ptr 对象

我有一个来自“C++标准库扩展”的问题:Exercise6IsaidinSection2.4.2thatyoushouldn'tconstructtwoshared_ptrobjectsfromthesamepointer.Thedangeristhatbothshared_ptrobjectsortheirprogenywilleventuallytrytodeletetheresource,andthatusuallyleadstotrouble.Infact,youcandothisifyou'recareful.It'snotparticularlyuseful,butwrit

c# - C# 中的指针及其在应用程序中的使用频率?

对我来说,指针是C++编程语言中最难的概念之一。当我学习C++时,我花了很多时间来学习它。然而,现在我主要从事完全用C#和VB.NET等语言编写的项目。事实上,我已经将近4年没有接触过C++。尽管C#有指针,但我还没有遇到必须在C#中使用指针的情况。所以我的问题是,我们可以通过使用指针在C#中获得什么样的生产力?什么情况下必须使用指针? 最佳答案 您已经在C#中使用了很多指针,只是它们看起来不像指针。每次你对一个类的实例做某事时,它就是一个指针。您几乎已经获得了所有潜在的好处,没有任何麻烦。在C#中可以更明确地使用指针,这就是大多数

那些年与指针的情仇(二)---二级指针&&指针与数组的那点事&&函数指针

关注小庄顿顿解馋(。・∀・)ノ゙欢迎回到我们的大型纪录片《那些年与指针的爱恨情仇》,在本篇博客中我们将继续了解指针的小秘密:二级指针,指针与数组的关系以及函数指针。请放心食用!文章目录一.二级指针二.数组与指针的那点事儿1.🏠数组名的理解1.1数组名本质理解1.2sizeof数组名和取地址数组名2.🏠指针数组3.🏠字符串常量4.🏠数组指针5.🏠数组传参三.函数指针一.二级指针前面我们讲到了指针变量是个存储指针(地址)的变量,我们知道变量在创建的时候操作系统会给他分配内存空间同时给他编号(地址),那么指针变量的指针(地址)能否被存储呢?这里就引入我们二级指针的概念了二级指针:存储指针变量地址的指

C语言第二十四弹---指针(八)

✨个人主页: 熬夜学编程的小林💗系列专栏: 【C语言详解】 【数据结构详解】指针1、数组和指针笔试题解析 1.1、字符数组1.1.1、代码1:1.1.2、代码2:1.1.3、代码3:1.1.4、代码4:1.1.5、代码5:1.1.6、代码6:总结1、数组和指针笔试题解析 1.1、字符数组  1.1.1、代码1:chararr[]={'a','b','c','d','e','f'};printf("%d\n",sizeof(arr));printf("%d\n",sizeof(arr+0));printf("%d\n",sizeof(*arr));printf("%d\n",sizeof(arr

c++ - 创建指向运行时创建的函数的函数指针

我想做这样的事情:for(inti=0;i基本上,有一个函数地址数组,其行为与数字列表相关。如果可以使用像Boost.Lambda这样的外部类就可以了。编辑:经过一些讨论,我得出的结论是我不够明确。请阅读Creatingfunctionpointerstofunctionscreatedatruntime我最后真正想做的是:classX{voidaction();}X*objects;for(inti=0;iaction()};voidsomeFunctionUnknownAtCompileTime(){}voidanotherFunctionUnknowAtCompileTime()

c++ - 返回指向 std::vector 中对象的指针

我有一个关于返回对vector元素的引用的非常基本的问题。有一个vectorvec存储类Foo的实例。我想从此vector访问一个元素。(不想使用vector索引)。我应该如何在此处对方法getFoo进行编码?#include#include#include#includeusingnamespacestd;classFoo{public:Foo(){};~Foo(){};};classB{public:vectorvec;Foo*getFoo();B(){};~B(){};};Foo*B::getFoo(){inti;vec.push_back(Foo());i=vec.size()