从字面上来讲,NULL是个空指针常量,我们可能会觉得:既然是个指针,那么应该调用#2。但事实上调用的却是#1,因为C++中NULL扩展为常数0,它是int型。 根本原因就是:常数0既是整数常量,也是空指针常量。 为了解决这种二义性,C++11标准引入了关键字nullptr,它作为一种空指针常量。#7例如: voidfoo(int) {}//#1void...
而NULL在C中通常被定义为0或(void*)0,这可能导致隐式类型转换的问题。使用nullptr可以避免这类问题,...
nullptr是专门用来表示空指针的字面量,它的类型是std::nullptr_t,可以自动转换为任何原生指针类型(raw...
只能用于表示指针,且不能写nullptr+1。因此,传递空指针时用nullptr没有问题,而用NULL+0作为实参就有...
func(NULL);return0; } 调用处func(NULL)我们可以希望调用的是func(char *a)函数,然而实际上,结果却是: 将函数调用处改为func(nullptr)试试呢, 结果就对了。看来C++11引入新的关键字来解决这个问题还是很有必要的,也因此我们在开发项目中,如果使用的是C++11或以上的标准,还是要多使用新的特性,使用nullptr关键...
输入nullptr。在C ++ 11中,nullptr是一个新的关键字,可以(并且应该!)用于表示NULL指针; 换句话说,无论你以前写过NULL,都应该使用nullptr。对于程序员来说,你不再清楚(每个人都知道NULL意味着什么),但它对编译器来说更加明确,当用作指针时,编译器不会再看到任何地方被用来具有特殊含义的0。顺便说一...
但是存在一个问题,C语言是有隐式类型转换的,所以 NULL(这里实际上是 (void *)0 ) 可以隐式转换到 int 或 char * 。这就让程序很为难了,程序不知道选择调用哪个函数。而在 C 语言中,并不支持函数重载,故在纯 C 语言中不会有上面这个问题。 下面我们来修改一下上面的程序,将 NULL 替换为 nullptr,修改后...
所以,在C++中,我们也经常能听到一个说法,就是赋予null pointer,应该是使用0,而非NULL。而nullptr ...
在C++11之前,只有0被承认作为null pointer constant,即null指针常量。因此,通常在C++中,为了赋予null指针,使用0而非NULL。然而,C++11引入了nullptr,一个具有类型特质的null指针常量。nullptr_t是其类型定义,这为编译器提供了实现更多细节的机会,同时也为用户提供了类型安全的保障。因此,在具备支持...
// int ptr_not_ok = reinterpret_cast(nullptr); // Not OK long ptr_ok = reinterpret_cast(nullptr); // OK reinterpret_cast无法将nullptr_t转换为任何指针类型。请改用static_cast。 void func(int*) { /*...*/ } void func(double*) { /*...*/ } ...