飞道的博客

C++11:一些微小的变化(新的数据类型、template表达式内的空格、nullptr、std::nullptr_t)

245人阅读  评论(0)
  • 本文介绍一些C++的两个新特性,它们虽然微小,但对你的编程十分重要

一、新的数据类型

  • C++11添加的新的数据类型如下:
    • char16_t、char32_t
    • long long、unsigned long long
    • std::nullptr_t(下面详细介绍)

二、Template表达式内的空格

  • C++11标准之前建议在“在两个template表达式的闭符之间放一个空格”的要求已经过时了
  • 例如:

  
  1. vector< list< int> >; //C++11之前
  2. vector< list< int>>; //C++11

三、nullptr

  • C++11允许你使用nullptr取代0或NULL,用来表示一个pointer(指针)指向所谓的no value
  • nullptr会被自动转换为各种pointer类型,但是不会被转换为任何证书类型

演示案例


   
  1. void f(int);
  2. void f(void*);
  3. f( 0); //调用f(int)
  4. f( NULL); //如果NULL被视为0,那么调用的是f(int),可能与你的预期不符
  5. f( nullptr); //调用f(void*)
  • 下面是在VS 2015上面的运行结果 

三、std::nullptr_t

  • std::nullptr_t是一种基础数据类型,定义于<sctddef>中
  • std::nullptr_t定义的变量必须初始化
  • nullptr属于一种常量,它是属于std::nullptr_t数据类型的

演示案例

 


   
  1. void f(int) {
  2. std:: cout << "int" << std:: endl;
  3. }
  4. void f(void*) {
  5. std:: cout << "void*" << std:: endl;
  6. }
  7. void f(std::nullptr_t) {
  8. std:: cout << "std::nullptr_t" << std:: endl;
  9. }
  10. int main()
  11. {
  12. f( 0);
  13. f( NULL);
  14. f( nullptr);
  15. //必须初始化
  16. std:: nullptr_t t = nullptr;
  17. f(t);
  18. return 0;
  19. }


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