我见过一些代码使用std::shared_ptr和自定义删除器来测试nullptr的参数,例如MyClass有一个close()方法,并用一些CreateMyClass构造:autopMyClass=std::shared_ptr(CreateMyClass(),[](MyClass*ptr){if(ptr)ptr->close();});在删除器中测试ptr是否为空是否有意义?这会发生吗?怎么样? 最佳答案 构造函数std::shared_ptr::shared_ptr(Y*p)要求deletep是一个有效的操作。这是一个有效的操
intmy_array[5]={0};int*my_pointer=0;my_pointer=&my_array;//compilererrormy_pointer=my_array;//ok如果my_array是数组的地址,那么&my_array会给我什么?我收到以下编译器错误:error:cannotconvert'int(*)[5]'to'int*'inassignment 最佳答案 my_array是一个由5个整数组成的数组的名称。编译器会很乐意将其转换为指向单个整数的指针。&my_array是一个指向5个整数数组的指针。编
我正在尝试使用ifstream打开文件失败的测试程序。代码如下:-#include#include#includeusingnamespacestd;intmain(){ifstreamifs("wrong_filename.txt");cout::value输出是:-falsetrue如果ifs不是pointer,那么它怎么等于nullptr? 最佳答案 在C++11之前,C++流可以隐式转换为void*。如果流不是处于无错误状态,则结果将是NULL,如果是,则返回其他结果。所以ifs==NULL(不应该与nullptr一起使用,
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭4年前。Improvethisquestion如果我说的是nullptr,是正确的术语thenullptr(只有一个,所有提及都是对同一事物的引用),或anullptr(有几个相同的东西)。也就是说,功能文档应该说Ifptristhenullptr,thefunctionusesaninternalbuffer...或Ifptrisanullptr,thefunctionusesaninternalbuffer...(迂腐地说,这不是
总结:nullptr转为bool,bool转为int,那为什么不nullptr转换成int?这段代码没问题:voidf(bool);f(nullptr);//fine,nullptrconvertstobool这没关系:boolb;inti(b);//fine,boolconvertstoint那为什么不行呢?voidf(int);f(nullptr);//whynotconvertnullptrtobool,thenbooltoint? 最佳答案 因为它正是nullptr的主要思想。nullptr旨在避免这种行为:structmy
我了解到nullptr除了可以转换为任何指针类型(但不能转换为任何整数类型)之外,还有自己的类型std::nullptr_t。所以有可能有一个接受std::nullptr_t的方法重载。究竟为什么需要这样的重载? 最佳答案 如果多个重载接受一个指针类型,则需要一个std::nullptr_t的重载来接受nullptr参数。如果没有std::nullptr_t重载,则在传递nullptr时应该选择哪个指针重载将是不明确的。例子:voidf(int*intp){//Passedanintpointer}voidf(char*charp)
我正在重构一些在许多地方使用NULL的旧代码。问题是IsitsafetoblindlyreplaceallNULLinstancesbynullptr?我对用nullptr替换NULL可能会导致一些运行时错误(编译时错误是可以的)的场景特别感兴趣,但我想不出任何问题。如果不是,将NULL自动替换为nullptr是否安全(如果有,则修复编译时错误)。如果之前有人问过问题,我深表歉意-我找不到它,如果你指出答案,我会删除它! 最佳答案 实际上它应该是相当安全的。但是,从技术上讲,您的程序的含义可能会发生变化,而不会导致任何编译器错误。考
C++11实现会将NULL定义为nullptr吗?这会被新的C++标准规定吗? 最佳答案 从马的嘴里C.3.2.4MacroNULL[diff.null]1/ThemacroNULL,definedinanyof,,,,,,or,isanimplementation-definedC++nullpointerconstantinthisInternationalStandard(18.2).由每个实现提供自己的定义,如果我没记错的话,gcc将其定义为__nullptr它对其进行了特殊检查(例如,验证它未在算术上下文中使用)。所以可以
我有一个返回指针和长度的函数,我想调用std::string::assign(pointer,length)。当长度为零并且指针可能为nullptr时,我是否必须做一个特殊情况(调用clear)?C++标准说:21.4.6.3basic_string::assignbasic_string&assign(constcharT*s,size_typen);Requires:spointstoanarrayofatleastnelementsofcharT.如果n为零怎么办?什么是零字符数组,一个如何指向它?调用是否有效s.assign(nullptr,0);还是未定义的行为?当大小n为零
我在玩SFINAE,发现我无法解释的行为。这个compilesfine:template::value>*=nullptr>voidfoo(Integer){}template::value>*=nullptr>voidfoo(Floating){}虽然这个(nullptr替换为0):template::value>*=0>voidfoo(Integer){}template::value>*=0>voidfoo(Floating){}givesmeacompileerror:prog.cpp:Infunction‘intmain()’:prog.cpp:13:10:error:nom