jjzjj

nullptr_t

全部标签

c++ - 给 nullptr 一个类型来进行模板推导

假设以下片段:templatevoidfct(T*a,T*b){//dosomething}Aa;fct(&a,nullptr);//Problemhere!这很麻烦,因为调用参数的类型是A*和nullptr_t所以编译器无法推断模板参数T.一般来说,我可以想出几种解决方法:定义A*b=nullptr并使用fct(&a,b)为fct定义一个带有一个参数的重载对于nullptr案例使用fct(&a,static_cast(nullptr))或者是否有更简洁的解决方案,例如创建“typednullptr”之类的东西? 最佳答案 只需将第

c++ - 将 MS HANDLE 初始化为 nullptr 是否安全?

我知道使用nullptr更“类型化”。它可以区分指针类型和0,在函数重载和模板特化方面表现良好。所以我不确定在每个HANDLE/的旧Win32项目中将NULL替换为nullptr是否安全>HWND/HINSTNACE初始化用法?任何建议都会有所帮助。谢谢 最佳答案 对于解析为指针类型的句柄,您可以使用nullptr而不是NULL。大量句柄类型被typedef定义为指针,因此您应该不会遇到太多问题。这不意味着可以使用NULL或nullptr。一些调用返回INVALID_HANDLE_VALUE,在VS2013中定义为((HANDLE)

c++ - nullptr 作为模板参数

我有一个像这样的模板:templatevoidfunc(A*a,B*b){...}在某些情况下,不需要参数B*b,因此,我尝试使用nullptr:MyAa;func(&a,nullptr);编译器不喜欢这样,因为nullptr不知何故不是一种类型。我该如何处理这种情况?唯一的想法是在这种情况下只使用虚拟类型。 最佳答案 问题是nullptr实际上不是一个指针,而是一个nullptr_t类型的对象。所以它不能匹配A*或B*。一种选择是提供重载以专门处理nullptr_t。templatevoidfunc(A*a,nullptr_t){

由 nullptr 初始化的 C++11 自动变量

C++11标准中变量“something”的类型是什么autosomething=nullptr;? 最佳答案 它的类型是std::nullptr_t,它是C++11中引入的单值类型,用于表示空指针,并且可以隐式转换为任何其他指针类型。 关于由nullptr初始化的C++11自动变量,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/20293632/

c++ - 编译器是否假定 "this"在 Debug模式下不是 nullptr?

我想知道在每个成员函数上放置assert(this!=nullptr);是否是个好主意。我相信编译器可以决定完全忽略这个断言,因为假设this不能为null,所以断言总是true并且可以在编译时解决-时间。但是如果编译器没有做出这个假设,那么这个断言对于及早发现问题非常有用。编译器会这样假设吗? 最佳答案 不,编译器通常不会这样假设。这些检查甚至还有商业代码,其中一些不仅断言而且实际上是逻辑。if(!this){doSomeWork();。虽然您无法在不遇到未定义行为的情况下达到this为NULL的情况,但如果您充分了解实现细节,那

c++ - 在为它分配新值之前应该将 `nullptr` 分配给 `std::unique_ptr` 吗?

#include#includeusingnamespacestd;intmain(){std::unique_ptrptrA=std::make_unique(10);ptrA=std::make_unique(20);//caseIreturn0;}#include#includeusingnamespacestd;intmain(){std::unique_ptrptrA=std::make_unique(10);ptrA=nullptr;//caseIIorptrA.reset()ptrA=std::make_unique(20);return0;}我见过很多人使用CaseII

【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

目录1->引用1.1->引用概念1.2->引用特性 1.3->常引用1.4->使用场景1.5->传值、传引用效率比较1.6->值和引用作为返回值类型的性能比较1.7->引用和指针的区别2->内联函数2.1->概念2.2->特性3->auto关键字(C++11)3.1->类型别名思考3.2->auto简介3.3->auto的使用细则3.4->auto不能推导的场景4->基于范围的for循环(C++11)4.1->范围for的语法4.2->范围for的使用条件5->指针空值nullptr(C++11)5.1->C++98中的指针空值1->引用1.1->引用概念引用不是新定义一个变量,而是给已经存在

【C++】C++入门 — 指针空值nullptr

C++入门指针空值指针空值在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本都是按照如下方式对其进行初始化:voidTestPtr(){ int*p1=NULL; int*p2=0; //……}NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:#ifndefNULL#ifdef__cplusplus#defineNULL0//NULL实际是0#else#defineNULL((void*)0)//这里强转为指针类型#endif#endif可以看到,NULL

c++ - 这是一个 nullptr 吗?

阅读this问答,我认为p不应该是nullptr,即使x是0。我理解的对吗?intmain(){intx=0;std::cin>>x;//Enter`0`void*p=(void*)x;//or:void*p=reinterpret_cast(x);if(!p)std::cout在标准输入中输入0后,消息pisnullptr将显示在我的GCC中。根据link,它不应计算为nullptr,但结果并不如我所料。代码是未定义的行为吗?或未指定的结果?为什么它求值为nullptr? 最佳答案 来自C++115.2.10/5Reinterpr

c++ - `const std::string& s = nullptr` 作为可选参数如何工作

据我所知,引用不能为空,但是当我运行这样的代码时:#include#includevoidtest(inti,conststd::string&s=nullptr){std::cout可选参数s可以为null,构建代码。更重要的是,当test(2)运行时,程序会抛出异常,而不是打印一些随机字符串。当我将s更改为一些基本类型(如int)时,它无法编译,所以我认为魔法留在字符串类中,但如何呢?而且,我如何检查s是否为空?如果我使用if(s==nullptr)或if(s.empty()),它无法编译。 最佳答案 test使用构造函数初始化