源码和警告内容
解决办法:
select(0,nullptr,nullptr,nullptr,&delay);
关于NULL和nullptr的区别:
在C++中,
nullptr
和null
(通常指的是NULL
宏,因为C++标准中并没有直接定义null
关键字)都用于表示空指针,但它们之间存在显著的区别。以下是它们之间的主要区别:1. 类型定义
- nullptr:是C++11标准中引入的一个新的关键字,用于表示空指针。它具有一个专门的类型
std::nullptr_t
,这个类型不能被隐式转换为其他非指针类型,但可以被自动转换为任何指针类型。这种类型安全性是nullptr
的主要优势之一。- NULL(在早期C++代码中常用来代替
nullptr
):通常被定义为宏,其值可以是0
或者(void*)0
。在C++中,它更多地被视为一个历史遗留的宏,可能因编译器和平台的不同而有不同的定义。2. 类型安全性
- nullptr:由于具有专门的类型
std::nullptr_t
,nullptr
提供了更好的类型安全性。它不会被错误地解释为整数或其他非指针类型,从而减少了类型不匹配的问题,尤其是在模板编程中。- NULL:由于
NULL
可能被定义为0
或(void*)0
,它可能在某些情况下导致类型混淆或隐式类型转换,进而引发潜在的问题。3. 语义明确性
- nullptr:其名称直接表明了它是一个空指针,这使得代码更加直观和易于理解。
- NULL:作为一个宏,其名称并不直接表明其用途是空指针,因此可能在某些上下文中引起歧义。
4. 函数重载
- 当涉及到函数重载时,
nullptr
由于其明确的类型,可以更容易地选择正确的重载版本。相反,如果函数重载版本包括接受指针类型和整数类型的参数,使用NULL
(如果它被定义为0
)可能会导致重载决议的不确定性。5. 推荐使用
- 在C++11及以后的版本中,推荐使用
nullptr
来表示空指针,因为它提供了更好的类型安全性和语义明确性。综上所述,
nullptr
和NULL
(或更一般地,null
)在C++中虽然都用于表示空指针,但nullptr
由于其类型安全性、语义明确性以及与函数重载的兼容性等优势,被认为是更现代、更安全的选择。因此,在编写新的C++代码时,建议使用nullptr
来替代NULL
或null
(如果指的是NULL
宏的话)。