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++文档阅读笔记-Difference Between C Structures and C++ Structures
C++文档阅读笔记-Difference Between C Structures and C++ Structures