C++文档阅读笔记-Understanding nullptr in C++

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++文档阅读笔记-Understanding nullptr in C++相关的知识,希望对你有一定的参考价值。

在编程中经常会使用到指针为NULL(need of nullptr)。

如下代码:

// C++ program to demonstrate problem with NULL
#include <bits/stdc++.h>
using namespace std;

// function with integer argument
void fun(int N)  cout << "fun(int)"; return;

// Overloaded function with char pointer argument
void fun(char* s)  cout << "fun(char *)"; return;

int main()

	// Ideally, it should have called fun(char *),
	// but it causes compiler error.
	fun(NULL);

输出如下:

16:13: error: call of overloaded 'fun(NULL)' is ambiguous
     fun(NULL);

上面的代码出现了何种问题呢?

NULL 是被定义为(void *)0,所以他也能被转换为int类型,所以fun(NULL)就搞不清,这个函数到底是调用fun(int N)还是fun(char *s)。

下面看下如下代码:

// This program compiles (may produce warning)
#include<stdio.h>
int main()

int x = NULL;

这里编译器会报警告。

为什么使用nullptr就能解决这个告警?

在上面这段代码中,如果使用nullptr代替NULL。就不会告警了,因为nullptr可以隐式转换为任意指针类型,而NULL,不能进行隐式转换为int类型。

如下nullptr隐式转换成int类型代码:

// This program does NOT compile
#include<stdio.h>
int main()

   int x = nullptr;

输出:

Compiler Error

如下nullptr转换成bool类型的例子:

// This program compiles
#include<iostream>
using namespace std;

int main()

int *ptr = nullptr;

// Below line compiles
if (ptr)  cout << "true"; 
else  cout << "false"; 

输出:

false

还有一个知识点是nullptr_t,这个可以进行比较,如下代码:

// C++ program to show comparisons with nullptr
#include <bits/stdc++.h>
using namespace std;

// Driver program to test behavior of nullptr
int main()

	// creating two variables of nullptr_t type
	// i.e., with value equal to nullptr
	nullptr_t np1, np2;

	// <= and >= comparison always return true
	if (np1 >= np2)
		cout << "can compare" << endl;
	else
		cout << "can not compare" << endl;

	// Initialize a pointer with value equal to np1
	char *x = np1; // same as x = nullptr (or x = NULL
					// will also work)
	if (x == nullptr)
		cout << "x is null" << endl;
	else
		cout << "x is not null" << endl;

	return 0;

输出如下:

can compare
x is null

以上是关于C++文档阅读笔记-Understanding nullptr in C++的主要内容,如果未能解决你的问题,请参考以下文章

Visualizing and Understanding Convolutional Networks(ZFNet网络)-论文阅读笔记

C++文档阅读笔记-Tuples in C++

C++文档阅读笔记-Tuples in C++

C++文档阅读笔记-Tuples in C++

C++文档阅读笔记-Difference Between C Structures and C++ Structures

C++文档阅读笔记-Difference Between C Structures and C++ Structures