自学内容网 自学内容网

C++报警:warning: zero as null pointer constantstddef.h

源码和警告内容 

解决办法:

select(0,nullptr,nullptr,nullptr,&delay);

 关于NULL和nullptr的区别:

  • 在C++中,nullptrnull(通常指的是NULL宏,因为C++标准中并没有直接定义null关键字)都用于表示空指针,但它们之间存在显著的区别。以下是它们之间的主要区别:

    1. 类型定义

  • nullptr:是C++11标准中引入的一个新的关键字,用于表示空指针。它具有一个专门的类型std::nullptr_t,这个类型不能被隐式转换为其他非指针类型,但可以被自动转换为任何指针类型。这种类型安全性是nullptr的主要优势之一。
  • NULL(在早期C++代码中常用来代替nullptr):通常被定义为宏,其值可以是0或者(void*)0。在C++中,它更多地被视为一个历史遗留的宏,可能因编译器和平台的不同而有不同的定义。
  • 2. 类型安全性

  • nullptr:由于具有专门的类型std::nullptr_tnullptr提供了更好的类型安全性。它不会被错误地解释为整数或其他非指针类型,从而减少了类型不匹配的问题,尤其是在模板编程中。
  • NULL:由于NULL可能被定义为0(void*)0,它可能在某些情况下导致类型混淆或隐式类型转换,进而引发潜在的问题。
  • 3. 语义明确性

  • nullptr:其名称直接表明了它是一个空指针,这使得代码更加直观和易于理解。
  • NULL:作为一个宏,其名称并不直接表明其用途是空指针,因此可能在某些上下文中引起歧义。
  • 4. 函数重载

  • 当涉及到函数重载时,nullptr由于其明确的类型,可以更容易地选择正确的重载版本。相反,如果函数重载版本包括接受指针类型和整数类型的参数,使用NULL(如果它被定义为0)可能会导致重载决议的不确定性。
  • 5. 推荐使用

  • 在C++11及以后的版本中,推荐使用nullptr来表示空指针,因为它提供了更好的类型安全性和语义明确性。
  • 综上所述,nullptrNULL(或更一般地,null)在C++中虽然都用于表示空指针,但nullptr由于其类型安全性、语义明确性以及与函数重载的兼容性等优势,被认为是更现代、更安全的选择。因此,在编写新的C++代码时,建议使用nullptr来替代NULLnull(如果指的是NULL宏的话)。


原文地址:https://blog.csdn.net/yueni_zhao/article/details/140290284

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!