我希望函数根据不同的参数值返回不同的类型,但是如何打印void指针指向的变量在main()?中#include#includeusingnamespacestd;void*func(inta){if(a==1){intparam=5;return¶m;}elseif(a==2){doubleparam=5.5;return¶m;}elseif(a==3){stringparam="hello";return¶m;}else{returnnullptr;}}intmain(){void*ptr=func(3);//cout 最佳答案
在C语言中,可以将一个数据指针赋值给一个void指针,然后将其强制转换回原来的类型,该数据指针将被回收。语言标准保证这种转换不会丢失信息。这通常意味着(不一定,但对于大多数平台而言)void指针的大小与数据指针的大小相同。因此,可以根据这些事实使用void指针作为指向异构类型的通用指针,而void指针本身具有统一的大小和表示形式。例如,有一个void指针数组,其元素指向动态分配的不同类型的对象。构造这样一个数组可以使某些事情变得方便。我的问题是:如何实现类似的东西,即C++中的通用指针类型,它符合以下条件:(假设g_pointer是类名)从任何指针类型构造,可以编写如下代码g_poin
假设您有以下代码:long&fn2(long&another_var1,longanother_var2){another_var1=another_var1+another_var2;another_var2=another_var2+another_var1;returnanother_var1;}intmain(){cout在您到达第2行之前,一切都按预期进行,其中返回false。当你autoresult时,它应该是一个引用变量到another_var1,它是对var1的引用,即它们都应该有相同的地址——它们只是同一内存的别名。查看第1行,返回15,给人一种它们都一样的错觉。然后
我制作了一个动态图结构,其中节点和弧都是类(我的意思是弧是内存中的实际实例,节点到节点的邻接列表并不暗示它们)。每个节点都有一个指向其连接的弧的指针列表。每个弧都有2个指向其连接的2个节点的指针。删除节点将对其每个弧调用delete。每个弧删除均从其连接的2个节点的弧列表中删除其指针。简化:~node(){while(arcs_list.size()){deletearcs_list[arcs_list.size()-1];}}~arc(){node_from.remove_arc(this);node_to.remove_arc(this);}如果我想在这里开始使用智能指针,该如何进
我正在为大学做一个项目,我试图找出如何正确删除内存,以及我想出的删除方式是否与使用智能指针具有相同的效果。这是一个包含在公司和团队中工作的所有员工的类,这些员工基本上具有指向某些员工的指针vector。classCompany{private:std::stringcompanyInfo;std::vectoremployees;std::vectorteams;public:Company();~Company();std::stringgetCompanyInfo()const;voidsetCompanyInfo(conststd::string&companyInfo);boo
我刚刚接到任务,将遗留应用程序从32位更新到64位。在审查任务的范围时,我在包含外部(例如平台)header之前立即发现了以下定义:#definePOINTER_32我找不到这个定义的用途或它有什么作用,但它看起来像是与我的任务直接相关的那种东西!它有什么用?它有什么用?立即移除它是否安全(我认为从长远来看有必要移除它)?这是使用MSVC++2008,即将成为2010。 最佳答案 这是一个通常在WindowsSDKheaderBaseTsd.hheader文件中声明的宏。在32位模式下编译时,它的定义如您所示。在64位模式下编译时定
例如:boost::shared_ptrtest(){boost::shared_ptrx(newint(3));returnx;}voidfunction(){inty=*test();...}使用shared_ptr来避免复制整个对象也是一个坏主意吗?例如矩阵/图像的vector。 最佳答案 在一般情况下,不会。您的示例复制了shared_ptr的内容,然后删除了原始值。现在,这里更大的问题是为int进行动态内存分配效率极低,但我假设您没有在实际代码中这样做。:) 关于C++:直接使
来自C#/Java背景,我正在尝试了解使用C++指针和引用的最佳实践。我敢肯定这已经在这个网站上被令人作呕地覆盖了,但我仍然不完全理解它。我已经阅读了一些C++常见问题解答,但我需要在上下文中查看它。假设我有两个类:classEmployee{Employee();~Employee();}classCompany{Company();~Company();AddEmployee(??employee);??GetEmployee();private:std::listemployees_;}在哪里AddEmployee获取一个员工对象并将其添加到员工的私有(private)列表中。A
voidf(char*&pch){cout给出下一个输出:0xbfa0d62c12345678900xbfa0d62c1234567890但如果我将第一行修改如下voidf(charconst*const&pch){我会得到:0xbfec7df812345678900xbfec7dfc1234567890是否因为需要将新的内存单元标记为const或其他原因而出现指针差异? 最佳答案 pch2是一个char*,而不是一个charconst*。您不能将charconst*&类型的引用绑定(bind)到char*类型的指针,因此以下格式不
我试图理解以下内容(假设MyStorageClass很大):classMyStorageClass{public:stringx;stringy;stringz;};classstorage{public:storage();~storage(){vector::iteratorit=myVec.begin();it!=myVec.end();it++){delete*it;}vectorgetItems(){for(inti=0;iv;};main(){storages;vectorvm=s.getItems();}根据我的理解,当s返回vector并分配给vm时,这是作为一个拷贝(