• 一起学习c++11——c++11中的新语法


    c++11新语法1: auto关键字
    c++11 添加的最有用的一个特性应该就是auto关键字。
    不知道大家有没有写过这样的代码:

    std::map<std::string, std::vector<std::shared_ptr<std::list<T> > > > map;
    std::map<std::string, std::vector<std::shared_ptr<std::list<T> > > >::iterator it = map.begin();


    甚至比这个更复杂的模板嵌套。
    这种情况下,不但代码冗长,而且容易出错,出错之后的编译错误提示信息也难以阅读
    而使用auto则可以大幅的简化代码的编写,也减少拼写出错的可能

    std::map<std::string, std::vector<std::shared_ptr<std::list<T> > > > map;
    auto it = map.begin();


    c++11新语法2: nullptr
    在没有nullptr之前,空指针的定义如下:

    #ifdef __cplusplus   
    #define NULL    0   
    #else   
    #define NULL    ((void *)0)   
    #endif   

    因为C++是强类型的,void *是不能隐式转换成其他指针类型的,所以c++的NULL被直接定义为0.
    这种情况下有个很扯的错误就是

    void foo(int i);  
    void foo(char* p) ;

    这种情况下:

    foo(NULL);

    是不明确的。
    所以在c++11中引入了nullptr

    foo(0);
    foo(nullptr);

    解决了这个问题。


    c++11新语法2: for循环
    c++中常规的for循环如下:

    std::vector<int> v;
    for(auto it = v.begin(); it != v.end(); it++){
        //do anything
    }

    其他语言,比如python中的for循环是这样的

    for var in list:
        #do anything

    cpper会不会感到忧郁?
    所以c++11引入了这个:

    for(auto v : vector){
        // do anything
    }


    以上就是c++11中最常用的一些新语法。

    abelkhan技术论坛:http://abelkhan.com/forum.php,欢迎大家交流技术

  • 相关阅读:
    异常问题处理记录(转载篇)
    linux服务器出现大量连接:sshd: root@notty
    第4章 Python运算符
    第2章 python基础知识
    第1章 python环境搭建
    Tomcat漏洞升级
    第3章 数据类型、运算符和表达式
    第2章 C语言基础知识
    第1章 概述
    第1章 企业管理概论
  • 原文地址:https://www.cnblogs.com/qianqians/p/5668573.html
Copyright © 2020-2023  润新知