草庐IT

c++ - 在 C++ 中自初始化为 nullptr 的普通原始指针

我喜欢C++11中的新指针类型,但有时我仍然需要原始指针。然而,让我对C++中的“原始”类型越来越难过的是,它们习惯于在未给出显式值时初始化为未定义。随着我更频繁地使用std::shared_ptr等,将原始指针初始化为null的需要感觉越来越脆弱和不必要。我在说:classfoo{...std::shared_ptrpb;//Initiallynullinwhateverconstructor.std::unique_ptrpd;//Likewise.std::weak_ptrpg;//Andagain.lar*pr;//Uh-oh!Whoknowswhatthisis?Better

c++ - 以 nullptr 作为参数的函数重载决议

考虑下面的代码。虽然fun的两个重载都接受指针,但将nullptr传递给fun不会导致任何编译错误。然而,非常相似的函数bun无法编译。当我使用typeid(i).name()打印参数i的类型时(修改代码后只是为了打印)我得到相同的类型,只是int*。在fun情况下解决歧义但在bun情况下失败的规则是什么?提前致谢!#includestructFoo{intsth;};templatevoidfun(decltype(U::sth)*i){std::coutvoidfun(U*i){std::cout(nullptr);//bun(nullptr);-->callofoverloade

c++ - 自解压可执行 C++

我想了解自解压PE文件的工作原理。有人可以解释为什么我的代码不起作用,或者修复main()部分。#include#includeusingnamespacestd;voidExtractResource(constHINSTANCEhInstance,WORDresourceID,constchar*outputFilename);intmain(){HINSTANCEhInst=GetModuleHandle(0);ExtractResource(hInst,101,"101.dll");ExtractResource(hInst,102,"102.dll");ExtractReso

有了NULL,为什么C++还需要nullptr?

在C++编程中,nullptr是一个类型安全的空指针常量,自C++11起被引入。然而,在此之前,程序员们通常使用NULL或0来表示空指针。那么,为什么有了NULL之后,C++还需要引入nullptr呢?本文将从类型安全、函数重载和代码清晰性三个方面来探讨这个问题。一、类型安全在C++中,NULL通常被定义为整数类型的零(0)或一个空指针常量。这种定义方式在某些情况下可能会导致类型混淆,因为NULL可以被隐式地转换为任何指针类型,也可以被转换为整数类型。这种隐式转换有时会导致意外的错误和难以调试的问题。相比之下,nullptr是一个指针类型的空常量,只能被隐式地转换为其他指针类型或布尔类型。这种

c++ - 使用 nullptr 和零大小进行分配

如果我例如有一个vectorv,按标准调用是否可以:voidsetData(constuint8_t*p,size_ts){v.assign(p,p+s);}setData(nullptr,0);一般来说调用STL函数总是可以的XXX(InputIteratorfirst,InputIteratorlast)如上,当distance(first,last)==0? 最佳答案 是的。可以将nullptr值复制到另一个指针对象,这就是实现可能做的所有事情。已经禁止超过结尾(此处定义为beginning==end)或取消引用它。

c++ - 如何通过 UVC 支持硬件编码 H264

我在使用DirectShow创建的视频聊天应用程序中使用罗技C930e网络摄像头。到目前为止,我能够在YUY2或mJPEG中使用原始流。不管怎样,我发现网络摄像头通过UVC接口(interface)支持硬件H264编码。现在我使用标准方法获取可能的网络摄像头捕获引脚配置,但那里没有H264引脚。voidlist_cameras{ICreateDevEnum*pDevEnum=nullptr;IEnumMoniker*pEnum=nullptr;//CreatetheSystemDeviceEnumerator.HRESULThr=CoCreateInstance(CLSID_Syste

c++ - 将 nullptr 传递给可变模板指针

我目前有以下功能:templatevoidGet(T*out,Args*...other);templatevoidGet(T*out);templatevoidGet(int*out);templatevoidGet(int64*out);templatevoidGet(double*out);templatevoidGet(char**out);templatevoidGet(void**out);调用使用:Get(&i,&t,&f);i为int,t为char*和f作为double。如果我想传递一个空指针,这非常有用,但有一个异常(exception)。Get(&i,nullptr

c++ - std::function 的 operator== 的真正目的是什么?

我不止一次看到std::function的operator==被误用,我不得不解释它的真正用途是什么。为了有利于future读者的清晰起见,here是文档。上面提到的文档说:Comparesa std::function withanullpointer.Emptyfunctions(thatis,functionswithoutacallabletarget)compareequal,non-emptyfunctionscomparenon-equal.也就是说,std::function也有operatorbool()(here是文档),其行为方式几乎相同并且可以使用代替比较my_

c++ - 如何在 C++ 中循环一个函数

我在使用C++编程语言时遇到问题,请帮助我。我正在编写一个程序,要求用户输入学生ID,该程序将从我的.txt文件中的15名学生列表中提取具有该ID的学生的信息。我有这些代码行:voidPerson_list::changeName(){Person*s;stringname;intid;inttemp_id;s=head;cout>id;while((s!=NULL)&&(s->getID()!=id)){s=s->next;}if(s!=NULL){s->Show();}if(s==NULL){cout我想做的是如果程序找不到学号(比如我输入16时,程序不能够找到一个学生,因为我的列

C++:将指针设置为 nullptr 与将其初始化为新变量类型之间的区别

我正在学习C++,我知道“new”关键字用于将内存中的地址分配给指针。而且我认为在使用“nullptr”时会初始化一个指向任何内容的指针。那是对的吗?引用示例://usingnullptrint*x=nullptr;//thisisjustapointerthatpointstonothingand//willneedtobeinitializedwithanaddressbeforeit//itcanbeused.Correct?//usingnewint*x=newint;//thisisbasicallygivingxanaddressinmemory.Willthe//addr