小言_互联网的博客

C++(标准库):11---头文件、、

463人阅读  评论(0)
  • 头文件<stddef>、<cstdlib>、<cstring>与其C对应版本兼容,在C++程序中经常用到。它们是C头文件<stddef.h>、<stdlib.h>、<string.h>的较新版本,定义了一些常用的常量、宏、类型和函数

一、<cstddef>

NULL与nullptr

  • 在C++11之前,NULL通常用来表示一个不指向任何对象的pointer。自C++11其以nullptr表示这个语义
  • C++保证NULL其实就是0(其类型可以是int也可以是long)
  • C语言中的NULL通常定义为(void*)0,这在C++中并不正确,NULL必须是个整数类型,否则你将无法将NULL赋予一个pointer。这是因为C++并没有定义从void*到任何类型的自动类型转换操作
  • 从C++11开始使用nullptr取代NULL
  • NULL与nullptr也在另一篇文章中有介绍:https://blog.csdn.net/qq_41453285/article/details/104946204

二、<cstdlib>

EXIT_SUCCESS、EXIT_FAILURE

  • 这两被用来传递给exit()的实参,也可以当做main的返回值

exit()、abort()

  • exit():会销毁所有static对象、清空所有缓冲区,关闭所有IO通道,然后终止程序,终止前会先调用由atexit()注册的函数。如果atexit()注册的函数抛出异常,就会调用terminate()
  • abort():会立刻终止函数,不作任何清理工作
  • 这两个函数都不会销毁局部对象,因为堆叠辗转(stack unwinding)开展不会被执行起来。如果你希望确保所有局部对象的析构函数被调用,应该运用异常或正常返回机制,然后从main()退出程序
  • atexit()注册的函数,在程序正常退出时会依注册相反次序被一一调用。无论是通过exit()退出或从main()尾部退出

quick_exit()

  • 从C++11期,该函数不再摧毁对象,而是调用先前曾被at_quick_exit()注册过的函数(以注册次序之逆向),然后调用_Exit()结束程序,不带任何析构或清理动作
  • 这意味着quick_exit()和_Exit()都不会清空(flush)标准文件缓冲区(标准输出区和错误输出区)
  • C++程序的终止(abort)——一种意外结束而非“意料内的结束加上发出一个错误代码”——通常做法是调用std::terminate(),后者默认调用abort()。举个例子,如果某析构函数或某个被声明为noexcept的函数抛出异常,就会发生这种事

三、<cstring>

  • 下图展示了<cstring>头文件中最重要的表达式:用以设定、拷贝、搬移内存的底层函数
  • 这些函数被应用于character trait(详情见《C++标准库》P855)


转载:https://blog.csdn.net/qq_41453285/article/details/105464646
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场