c++11 订阅
C++11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 的简称 [1]  。C++11标准由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IEC JTC1/SC22/WG21)于2011年8月12日公布 [2]  ,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于C++11标准的草案(仅编辑上的修正)。此次标准为C++98发布后13年来第一次重大修正。 展开全文
C++11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 的简称 [1]  。C++11标准由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IEC JTC1/SC22/WG21)于2011年8月12日公布 [2]  ,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于C++11标准的草案(仅编辑上的修正)。此次标准为C++98发布后13年来第一次重大修正。
信息
发布时间
2011年8月12日
标准版本
C++标准第三版
标准文件号
ISO/IEC 14882:2011
中文名
C++11
出版时间
2011年9月
外文名
C++11
c++11基本信息
C++11标准为C++编程语言的第三个官方标准,正式名叫ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 。 [1]  在正式标准发布前,原名C++0x。它将取代C++标准第二版ISO/IEC 14882:2003 - Programming languages -- C++ 成为C++语言新标准。C++11包含了核心语言的新机能,并且拓展C++标准程序库,并且加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外)。C++ 标准委员会计划在2010年8月之前完成对最终委员会草案的投票,以及于2011年3月3召开的标准会议完成国际标准的最终草案。最终于2011年8月12日公布,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于现行标准的草案(编辑上的修正)。此次标准为13年第一次重大修正。ISO将在2014年和2017年发布C++的后续版本 [3]  。
收起全文
精华内容
下载资源
问答
  • c++11
    万次阅读
    更多相关内容
  • C++11新标准中文版

    热门讨论 2013-08-26 14:10:31
    C++11新标准 来自百度文库 这里免积分和大家共享
  • C++11 & C++14 & C++17新特性

    千次阅读 2018-12-06 07:59:13
    C++11C++11包括大量的新特性:包括lambda表达式,类型推导关键字auto、decltype,和模板的大量改进。 新的关键字 auto C++11中引入auto第一种作用是为了自动类型推导 auto的自动类型推导,用于从初始化表达式...

    原文:https://www.cnblogs.com/guxuanqing/p/6707824.html

    C++11:C++11包括大量的新特性:包括lambda表达式,类型推导关键字auto、decltype,和模板的大量改进。

    新的关键字

    auto

    C++11中引入auto第一种作用是为了自动类型推导

    auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推导,可以大大简化我们的编程工作

    auto实际上实在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响

    另外,似乎auto并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配

    1. auto a; // 错误,auto是通过初始化表达式进行类型推导,如果没有初始化表达式,就无法确定a的类型  
    2. auto i = 1;  
    3. auto d = 1.0;  
    4. auto str = "Hello World";  
    5. auto ch = 'A';  
    6. auto func = less<int>();  
    7. vector<int> iv;  
    8. auto ite = iv.begin();  
    9. auto p = new foo() // 对自定义类型进行类型推导 

    auto不光有以上的应用,它在模板中也是大显身手,比如下例这个加工产品的例子中,如果不使用auto就必须声明Product这一模板参数:

    1. template <typename Product, typename Creator>  
    2. void processProduct(const Creator& creator) {  
    3.     Product* val = creator.makeObject();  
    4.     // do somthing with val  
    5. }         
    6.         . 

    如果使用auto,则可以这样写:

    1. template <typename Creator>  
    2. void processProduct(const Creator& creator) {  
    3.     auto val = creator.makeObject();  
    4.     // do somthing with val  

    抛弃了麻烦的模板参数,整个代码变得更加正解了。

    decltype

    decltype实际上有点像auto的反函数,auto可以让你声明一个变量,而decltype则可以从一个变量或表达式中得到类型,有实例如下:

    1. int x = 3;  
    2. decltype(x) y = x; 

    有人会问,decltype的实用之处在哪里呢,我们接着上边的例子继续说下去,如果上文中的加工产品的例子中我们想把产品作为返回值该怎么办呢?我们可以这样写:

    1. template <typename Creator>  
    2. auto processProduct(const Creator& creator) -> decltype(creator.makeObject()) {  
    3.     auto val = creator.makeObject();  
    4.     // do somthing with val  

    nullptr

    nullptr是为了解决原来C++中NULL的二义性问题而引进的一种新的类型,因为NULL实际上代表的是0,

    1. void F(int a){  
    2.     cout<<a<<endl;  
    3. }  
    4.  
    5. void F(int *p){  
    6.     assert(p != NULL);  
    7.  
    8.     cout<< p <<endl;  
    9. }  
    10.  
    11. int main(){  
    12.  
    13.     int *p = nullptr;  
    14.     int *q = NULL;  
    15.     bool equal = ( p == q ); // equal的值为true,说明p和q都是空指针  
    16.     int a = nullptr; // 编译失败,nullptr不能转型为int  
    17.     F(0); // 在C++98中编译失败,有二义性;在C++11中调用F(int)  
    18.     F(nullptr);  
    19.  
    20.     return 0;  

    序列for循环

    在C++中for循环可以使用类似java的简化的for循环,可以用于遍历数组,容器,string以及由begin和end函数定义的序列(即有Iterator),示例代码如下:

    1. map<string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};  
    2. for (auto p : m){  
    3.     cout<<p.first<<" : "<<p.second<<endl;  

    Lambda表达式

    lambda表达式类似Javascript中的闭包,它可以用于创建并定义匿名的函数对象,以简化编程工作。Lambda的语法如下:

    [函数对象参数](操作符重载函数参数)->返回值类型{函数体}

    1. vector<int> iv{5, 4, 3, 2, 1};  
    2. int a = 2, b = 1;  
    3.  
    4. for_each(iv.begin(), iv.end(), [b](int &x){cout<<(x + b)<<endl;}); // (1)  
    5.  
    6. for_each(iv.begin(), iv.end(), [=](int &x){x *= (a + b);});     // (2)  
    7.  
    8. for_each(iv.begin(), iv.end(), [=](int &x)->int{return x * (a + b);});// (3) 
    • []内的参数指的是Lambda表达式可以取得的全局变量。(1)函数中的b就是指函数可以得到在Lambda表达式外的全局变量,如果在[]中传入=的话,即是可以取得所有的外部变量,如(2)和(3)Lambda表达式
    • ()内的参数是每次调用函数时传入的参数
    • ->后加上的是Lambda表达式返回值的类型,如(3)中返回了一个int类型的变量

    变长参数的模板

    我们在C++中都用过pair,pair可以使用make_pair构造,构造一个包含两种不同类型的数据的容器。比如,如下代码:

    1. auto p = make_pair(1, "C++ 11"); 

    由于在C++11中引入了变长参数模板,所以发明了新的数据类型:tuple,tuple是一个N元组,可以传入1个, 2个甚至多个不同类型的数据

    1. auto t1 = make_tuple(1, 2.0, "C++ 11");  
    2. auto t2 = make_tuple(1, 2.0, "C++ 11", {1, 0, 2}); 

    这样就避免了从前的pair中嵌套pair的丑陋做法,使得代码更加整洁

    另一个经常见到的例子是Print函数,在C语言中printf可以传入多个参数,在C++11中,我们可以用变长参数模板实现更简洁的Print

    1. template<typename head, typename... tail>  
    2. void Print(Head head, typename... tail) {  
    3.     cout<< head <<endl;  
    4.     Print(tail...);  

    Print中可以传入多个不同种类的参数,如下:

    1. Print(1, 1.0, "C++11"); 

    更加优雅的初始化方法

    在引入C++11之前,只有数组能使用初始化列表,其他容器想要使用初始化列表,只能用以下方法:

    1. int arr[3] = {1, 2, 3}  
    2. vector<int> v(arr, arr + 3); 

    在C++11中,我们可以使用以下语法来进行替换:

    1. int arr[3]{1, 2, 3};  
    2. vector<int> iv{1, 2, 3};  
    3. map<int, string>{{1, "a"}, {2, "b"}};  
    4. string str{"Hello World"}; 

    然后呢…

    如果你想了解更多C++11令人兴奋的新特性,我会向你推荐这两个博客:

    胡健的C++11系列博文

    ToWrting的C++11系列博文

    C++11的编译器支持列表

    原文链接:http://my.oschina.net/wangxuanyihaha/blog/183151

    C++14:C++14的主要特性可以分为三个领域:Lambda函数、constexpr和类型推导。

    Lambda函数

    C++14的泛型Lambda使编写如下语句成为可能:

    auto lambda = [](auto x, auto y) {return x + y;};

    而另一方面,C++11要求Lambda参数使用具体的类型声明,比如:

    auto lambda = [](int x, int y) {return x + y;};

    此外,新标准中的std::move函数可用于捕获Lambda表达式中的变量,这是通过移动对象而非复制或引用对象实现的:

    std::unique_ptr ptr(new int(10));
    auto lambda = [value = std::move(ptr)] {return *value;};

    constexpr

    在C++11中,使用constexpr声明的函数可以在编译时执行生成一个值,用在需要常量表达式的地方,比如作为初始化模板的整形参数。C++11的constexpr函数只能包含一个表达式,C++14放松了这些限制,支持诸如if 和switch等条件语句,支持循环,其中包括基于区间(range)的for 循环。

    类型推导

    C++11仅支持Lambda函数的类型推导,C++14对其加以扩展,支持所有函数的返回类型推导:

    auto DeducedReturnTypeFunction();

    因为C++14是强类型语言,有些限制需要考虑:

    • 如果一个函数的实现中有多个返回语句,这些语句一定要推导出同样的类型。
    • 返回类型推导可以用在前向声明中,但是在使用它们之前,翻译单元中必须能够得到函数定义。
    • 返回类型推导可以用在递归函数中,但是递归调用必须以至少一个返回语句作为先导,以便编译器推导出返回类型。

    C++14带来的另一个类型推导方面的改进是decltype(auto)语法,它支持使用与auto同样的机制计算给定表达式的类型。auto和 decltype在C++11中就已经出现了,但是它们在推导类型时使用了不同的机制,这可能会产生不同的结果。

    C++14中的其他改变包括可以声明变量模板,支持使用0b或0B前缀来声明二进制字面常量。InfoQ已经介绍过C++14中可能破坏C++11程序的其他小型修改

    主流C++编译器对新语言特性的支持正在有条不紊地开发:Clang“完全实现了当前草案的所有内容”;GCCVisual Studio也对C++14的新特性提供了一些支持。

    展开全文
  • C++11新特性

    千次阅读 2020-07-17 00:31:17
    什么是C++11 C++11是曾经被叫做C++0x,是对目前C++语言的扩展和修正,C++11不仅包含核心语言的新机能,而且扩展了C++的标准程序库(STL),并入了大部分的C++ Technical Report 1(TR1)程序库(数学的特殊函数除外)...

    什么是C++11

    C++11是曾经被叫做C++0x,是对目前C++语言的扩展和修正,C++11不仅包含核心语言的新机能,而且扩展了C++的标准程序库(STL),并入了大部分的C++ Technical Report 1(TR1)程序库(数学的特殊函数除外)。

    C++11包括大量的新特性:包括lambda表达式类型推导关键字auto、decltype,和模板的大量改进 等等。

    本文将对C++11的以上新特性进行简单的讲解,以便大家能够快速了解到C++11对C++的易用性方面起到的巨大作用。

    C++11 是第二个真正意义上的 C++ 标准,也是 C++ 的一次重大升级。C++11 增加了很多现代编程语言的特性,比如自动类型推导、智能指针、lambda 表达式等,这使得 C++ 看起来又酷又潮,一点也不输 Java 和 C#

    新的关键字

    auto

    C++11中引入auto第一种作用是为了自动类型推导

    auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推导,可以大大简化我们的编程工作

    auto实际上实在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响

    另外,似乎auto并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配。

    auto a; // 错误,auto是通过初始化表达式进行类型推导,如果没有初始化表达式,就无法确定a的类型
    auto i = 1;
    auto d = 1.0;
    auto str = "Hello World";
    auto ch = 'A';
    auto func = less<int>();
    vector<int> iv;
    auto ite = iv.begin();
    auto p = new foo() // 对自定义类型进行类型推导

    auto不光有以上的应用,它在模板中也是大显身手,比如下例这个加工产品的例子中,如果不使用auto就必须声明Product这一模板参数:

    template <typename Product, typename Creator>
    void processProduct(const Creator& creator) {
        Product* val = creator.makeObject();
        // do somthing with val
    } 

    如果使用auto,则可以这样写:

    template <typename Creator>
    void processProduct(const Creator& creator) {
        auto val = creator.makeObject();
        // do somthing with val
    }

    抛弃了麻烦的模板参数,整个代码变得更加整洁了。

    decltype

    decltype实际上有点像auto的反函数,auto可以让你声明一个变量,而decltype则可以从一个变量或表达式中得到类型,有实例如下:

    int x = 3;
    decltype(x) y = x;

    有人会问,decltype的实用之处在哪里呢,我们接着上边的例子继续说下去,如果上文中的加工产品的例子中我们想把产品作为返回值该怎么办呢?我们可以这样写:

    template <typename Creator>
    auto processProduct(const Creator& creator) -> decltype(creator.makeObject()) {
        auto val = creator.makeObject();
        // do somthing with val
    }

    nullptr 空指针

    nullptr是为了解决原来C++中NULL的二义性问题而引进的一种新的类型,因为NULL实际上代表的是0,

    以往我们使用NULL表示空指针。它实际上是个为0的int

     

    void F(int a){
        cout<<a<<endl;
    }
    
    void F(int *p){
        assert(p != NULL);
    
        cout<< p <<endl;
    }
    
    int main(){
    
        int *p = nullptr;
        int *q = NULL;
        bool equal = ( p == q ); // equal的值为true,说明p和q都是空指针
        int a = nullptr; // 编译失败,nullptr不能转型为int
        F(0); // 在C++98中编译失败,有二义性;在C++11中调用F(int)
        F(nullptr);
    
        return 0;
    }

    序列for循环

    在C++11 中for循环可以使用类似java的简化的for循环,可以用于遍历数组,容器,string以及由begin和end函数定义的序列(即有Iterator),示例代码如下:

    map<string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
    for (auto p : m){
        cout<<p.first<<" : "<<p.second<<endl;
    }

    Lambda表达式                   Lambda :英 [ˈlæmdə]

    lambda表达式类似Javascript中的闭包,它可以用于创建并定义匿名的函数对象,以简化编程工作。

    Lambda的语法如下:

    [函数对象参数](操作符重载函数参数)->返回值类型{函数体}

    vector<int> iv{5, 4, 3, 2, 1};
    int a = 2, b = 1;
    
    for_each(iv.begin(), iv.end(), [b](int &x){cout<<(x + b)<<endl;}); // (1)
    
    for_each(iv.begin(), iv.end(), [=](int &x){x *= (a + b);});     // (2)
    
    for_each(iv.begin(), iv.end(), [=](int &x)->int{return x * (a + b);});// (3)
    • []内的参数指的是Lambda表达式可以取得的全局变量。(1)函数中的b就是指函数可以得到在Lambda表达式外的全局变量,如果在[]中传入=的话,即是可以取得所有的外部变量,如(2)和(3)Lambda表达式()内的参数是每次调用函数时传入的参数。
    • ->后加上的是Lambda表达式返回值的类型,如(3)中返回了一个int类型的变量

    变长参数的模板

    我们在C++中都用过pair,pair可以使用make_pair构造,构造一个包含两种不同类型的数据的容器。比如,如下代码:

    auto p = make_pair(1, "C++ 11");
    
    由于在C++11中引入了变长参数模板,所以发明了新的数据类型:tuple,tuple是一个N元组,可以传入1个, 2个甚至多个不同类型的数据
    
    auto t1 = make_tuple(1, 2.0, "C++ 11");
    auto t2 = make_tuple(1, 2.0, "C++ 11", {1, 0, 2});

    这样就避免了从前的pair中嵌套pair的丑陋做法,使得代码更加整洁

    另一个经常见到的例子是Print函数,在C语言中printf可以传入多个参数,在C++11中,我们可以用变长参数模板实现更简洁的Print

    template<typename head, typename... tail>
    void Print(Head head, typename... tail) {
        cout<< head <<endl;
        Print(tail...);
    }

    Print中可以传入多个不同种类的参数,如下:

    Print(1, 1.0, "C++11");

    更加优雅的初始化方法

    在引入C++11之前,只有数组能使用初始化列表,其他容器想要使用初始化列表,只能用以下方法:

    int arr[3] = {1, 2, 3}
    vector<int> v(arr, arr + 3);

    在C++11中,我们可以使用以下语法来进行替换:

    int arr[3]{1, 2, 3};
    vector<int> iv{1, 2, 3};
    map<int, string>{{1, "a"}, {2, "b"}};
    string str{"Hello World"};

     

     

     

    https://www.xuebuyuan.com/3265958.html

    http://c.biancheng.net/cplus/11/

     

     

    展开全文
  • C++ 编译器对C++11、14、17的支持情况

    万次阅读 2019-03-21 17:03:56
    这些功能特性包括C++11、C++14、C++17和之后接受的标准版本 (C++20/C++2a),还有几个技术规范的内容。 C++2a 功能特性 注意,此列表可能根据 C++2a 标准草案的演化而更改。 C++2a 功能特性 提案 ...

    C++ 编译器支持情况表

    下表为各个编译器对新的 C++ 功能特性的支持情况。这些功能特性包括 C++11 、 C++14 、 C++17 和之后接受的标准版本 (C++20/C++2a) ,还有几个技术规范的内容。

     

    C++2a 功能特性

    注意,此列表可能根据 C++2a 标准草案的演化而更改。

     

    C++2a 功能特性
     
    提案
     
    版本
     

    GCC

    Clang

    MSVC

    EDG eccp

    Intel C++

    IBM XLC++

    Sun/Oracle C++

    Embarcadero C++ Builder

    Cray

    Portland Group (PGI)

     [折叠
    允许 lambda 捕获 [=, this]P0409R2c++2a-lang86 5.1      
    __VA_OPT__P0306R4c++2a-lang8 (部分)*6 5.1     

     

    指派初始化器P0329R4c++2a-lang4.7 (部分)*
    8
    3.0 (部分)* 5.1     

     

    泛型 lambda 的模板形参列表P0428R2c++2a-lang8  5.1     

     

    位域的默认成员初始化器P0683R1c++2a-lang86 5.1     

     

    类模板实参推导中的 initializer_list 构造函数P0702R1c++2a-lang8619.14*5.0     

     

    const& 限定的成员指针P0704R1c++2a-lang86 5.1     

     

    概念 (concept)P0734R0c++2a-lang6
    (仅 TS)
             
    不求值语境中的 lambdaP0315R4c++2a-lang9        

     

    三路比较运算符P0515R3c++2a-lang 8 (部分)*19.20*      

     

    简化隐式 lambda 捕获P0588R1c++2a-lang8        

     

    基于范围的 for 的初始化语句P0614R1c++2a-lang98       

     

    可默认构造且可赋值的无状态 lambdaP0624R2c++2a-lang98 5.1     

     

    与预置的复制构造函数的 const 不匹配P0641R2c++2a-lang98 5.1     

     

    特化上的访问检查P0692R1c++2a-lang8 (部分)*       

     

    ADL 与不可见的函数模板P0846R0c++2a-lang9        

     

    令 constexpr 函数的实例化较不贪婪P0859R0c++2a-lang5.2 (部分)*
    9
             
    属性 [[likely]] 与 [[unlikely]]P0479R5c++2a-lang9  5.1     

     

    使 typename 更可选P0634R3c++2a-lang9        

     

    Lambda 初始化捕获中的包展开P0780R2c++2a-lang9        

     

    属性 [[no_unique_address]]P0840R2c++2a-lang9  5.1      
    契约P0542R5c++2a-lang         

     

    销毁的 operator deleteP0722R3c++2a-lang96       

     

    非类型模板形参中的类类型P0732R2c++2a-lang9        

     

    explicit(bool)P0892R2c++2a-lang9  5.1     

     

    整合功能特性测试宏P0941R2c++2a-lang53.419.15*5.0     

     

    禁止聚合体有用户声明的构造函数P1008R1c++2a-lang98 5.1     

     

    constexpr 虚函数P1064R0c++2a-lang9  5.1      
    char8_tP0482R6c++2a-lang97       

     

    std::is_constant_evaluated()P0595R2c++2a-lang9        

     

    constexpr try-catch 代码块P1002R1c++2a-lang98 5.1     

     

    立即函数P1073R3c++2a-lang   5.1     

     

    嵌套内联命名空间P1094R2c++2a-lang98 5.1     

     

    constexpr 的 dynamic_cast 和多态 typeidP1327R1c++2a-lang   5.1     

     

    在 constexpr 中改变联合体的活跃成员P1330R0c++2a-lang9  5.1      
    结构化绑定的扩展P1091R3
    P1381R1
    c++2a-lang         

     

    更强的 Unicode 要求P1041R4
    P1139R2
    c++2a-lang        

     

    参数化的聚合体初始化P0960R3c++2a-lang         

     

    模块 (module)P1103R3c++2a-lang 8 (部分)       

     

    协程 (coroutine)P0912R5c++2a-lang 8 (部分)       

     

    std::endianP0463R1c++2a87 N/A     

     

    std::remove_cvrefP0550R2c++2a9619.20*N/A     

     

    扩展 std::make_shared 以支持数组P0674R1c++2a   N/A      
    原子性浮点算术P0020R6c++2a   N/A     

     

    同步缓冲的 ostreamP0053R7c++2a   N/A     

     

    <algorithm> 与 <utility> 的 constexprP0202R3c++2a 8 N/A     

     

    <complex> 的更多 constexprP0415R1c++2a9  N/A     

     

    字符串前缀与后缀检查P0457R2c++2a96 N/A     

     

    operator<=> 的库支持 <compare>P0515R3c++2a 719.20*N/A     

     

    转换指针为裸指针的工具P0653R2c++2a86 N/A     

     

    原子性的 shared_ptr 与 weak_ptrP0718R2c++2a   N/A      
    std::spanP0122R7c++2a 7 N/A     

     

    日历时区P0355R7c++2a 7 N/A     

     

    <version>P0754R2c++2a97 N/A      
    std::atomic_refP0019R8c++2a   N/A     

     

    整数的 2 的幂的运算P0556R3c++2a9  N/A     

     

    std::bit_cast()P0476R2c++2a   N/A     

     

    std::destroying_deleteP0722R3c++2a9  N/A     

     

    概念库P0898R3c++2a   N/A      
    一致的容器擦除P1209R0c++2a98 N/A      
    C++2a 功能特性
     
    提案
     
    版本
     

    GCC

    Clang

    MSVC

    EDG eccp

    Intel C++

    IBM XLC++

    Sun/Oracle C++

    Embarcadero C++ Builder

    Cray

    Portland Group (PGI)

     

    C++17 功能特性

    C++17 功能特性
     
    提案
     
    版本
     

    GCC

    Clang

    MSVC

    EDG eccp

    Intel C++

    IBM XLC++

    Sun/Oracle C++

    Embarcadero C++ Builder

    Cray

    Portland Group (PGI)

     [折叠
    直接列表初始化的新 auto 规则N3922c++17-lang53.819.0*4.10.117.0    17.7
    无消息的 static_assertN3928c++17-lang62.519.10*4.1218.0    17.7
    模板模板形参中的 typenameN4051c++17-lang53.519.0*4.10.117.0    17.7
    移除三标符N4086c++17-lang53.516.0*5.0      
    嵌套命名空间定义N4230c++17-lang63.619.0*4.1217.0    17.7
    命名空间和枚举项的属性N4266c++17-lang4.9 (命名空间) / 6 (枚举项)3.619.0*4.1117.0    17.7
    u8 字符字面量N4267c++17-lang63.619.0*4.1117.0    17.7
    允许所有非类型模板实参的常量求值N4268c++17-lang63.619.12*5.0      
    折叠表达式N4295c++17-lang63.619.12*4.1419.0    18.1
    移除 register 关键字的已弃用用法P0001R1c++17-lang73.819.11*4.1318.0    17.7
    移除已弃用的 operator++(bool)P0002R1c++17-lang73.819.11*4.1318.0    17.7
    从 C++17 移除已弃用的异常规定P0003R5c++17-lang7419.10*4.1419.0     
    令异常规定为类型系统的一部分P0012R1c++17-lang7419.12*4.1419.0     
    有基类的类的聚合初始化P0017R1c++17-lang73.919.14*5.0      
    *this 的 lambda 捕获P0018R3c++17-lang73.919.11*4.1419.0    18.1
    使用属性命名空间而不重复P0028R4c++17-lang73.919.11*4.1318.0    17.7
    过对齐数据的动态内存分配P0035R4c++17-lang7419.12*4.14      
    一元折叠表达式和空形参包P0036R0c++17-lang63.919.12*4.14      
    预处理器条件中的 __has_includeP0061R1c++17-lang519.11*4.1318.0    17.7
    类模板实参推导P0091R3c++17-lang7519.14*5.0     19.1
    具有 auto 类型的非类型模板形参P0127R2c++17-lang7419.14*5.0     19.1
    有保证的复制消除P0135R1c++17-lang7419.13*5.0     19.1
    继承构造函数的新规定 (DR1941 等)P0136R1c++17-lang73.919.14*       
    替换含引用成员的类对象P0137R1c++17-lang7619.14*5.0      
    枚举的直接列表初始化P0138R2c++17-lang73.919.11*4.1418.0     
    更严格的表达式求值顺序P0145R3c++17-lang7419.14*5.0      
    constexpr lambda 表达式P0170R1c++17-lang7519.11*4.1419.0    18.1
    基于范围 for 的相异 begin 和 end 类型P0184R0c++17-lang63.919.10*4.1218.0    17.7
    [[fallthrough]] 属性P0188R1c++17-lang73.919.10*4.1318.0    17.7
    [[nodiscard]] 属性P0189R1c++17-lang73.919.11*4.1318.0    17.7
    using 声明中的包展开P0195R2c++17-lang7419.14*5.0      
    [[maybe_unused]] 属性P0212R1c++17-lang73.919.11*4.1318.0    17.7
    结构化绑定P0217R3c++17-lang7419.11*4.1419.0    18.1
    十六进制浮点字面量P0245R1c++17-lang3.019.11*4.1318.0    17.7
    忽略未知属性P0283R2c++17-lang3.919.11*4.1318.0    17.7
    constexpr if 语句P0292R2c++17-lang73.919.11*4.1419.0    18.1
    if 和 switch 的初始化语句P0305R1c++17-lang73.919.11*4.1418.0    18.1
    内联变量P0386R2c++17-lang73.9*19.12*4.1419.0    18.1
    DR :模板模板实参的匹配排除了兼容的模板P0522R0c++17-lang7419.12*5.0      
    std::uncaught_exceptionsN4259c++1763.719.0*N/AN/A    N/A
    改进 std::pair 和 std::tupleN4387c++176419.0*N/AN/A    N/A
    std::anyP0220R1c++177419.10*N/AN/A    N/A
    std::variantP0088R3c++177419.10*N/AN/A    N/A
    std::optionalP0220R1c++177419.10*N/AN/A    N/A
    std::shared_mutex (无时限)N4508c++1763.719.0*N/AN/A    N/A
    std::string_viewN3921c++177419.10*N/AN/A    N/A
    并行 TS 的标准化P0024R2c++17  19.14*
    (部分)
    N/A18.0*    N/A
    C++17 应当指代 C11 而不是 C99P0063R3c++179719.0*
    (部分)*
    N/AN/A    N/A
    初等字符串转换P0067R5c++178 (无浮点) 19.14*(无浮点)
    19.15*
    N/AN/A    N/A
    数学特殊函数P0226R1c++177 19.14*N/AN/A    N/A
    接合 map 和 setP0083R3c++177819.12*N/AN/A    N/A
    硬件干涉大小P0154R1c++17  19.11*N/AN/A    N/A
    std::filesystemP0218R1c++178719.14*N/AN/A    N/A
    std::byteP0298R3c++177519.11*N/AN/A    N/A
    C++17 功能特性
     
    提案
     
    版本
     

    GCC

    Clang

    MSVC

    EDG eccp

    Intel C++

    IBM XLC++

    Sun/Oracle C++

    Embarcadero C++ Builder

    Cray

    Portland Group (PGI)

     

    C++14 功能特性

    C++14 功能特性
     
    提案
     
    版本
     

    GCC

    Clang

    MSVC

    EDG eccp

    Intel C++

    IBM XLC++

    Sun/Oracle C++

    Embarcadero C++ Builder

    Cray

    Portland Group (PGI)

     [折叠
    按语境转换的遣词调整N3323c++14-lang4.93.418.0*4.916.013.1.2*5.15 8.616.1
    二进制字面量N3472c++14-lang4.3/4.92.919.0*4.1011.013.1.2*5.14 8.62015
    decltype(auto) ,普通函数的返回类型推导N3638c++14-lang4.8/4.93.3/3.419.0*4.915.013.1.2*5.15 8.616.1
    带初始化/泛化的 lambda 捕获 (init-capture)N3648c++14-lang4.5/4.93.419.0*4.1015.0 5.15 8.616.1
    泛型(多态) lambda 表达式N3649c++14-lang4.93.419.0*4.1016.013.1.2*5.15 8.616.1
    变量模板N3651c++14-lang53.419.0*4.1117.013.1.2*5.15 8.617.4
    扩展的 constexprN3652c++14-lang53.419.10*4.1117.013.1.2*5.15 8.617.4
    成员初始化器与聚合体 (NSDMI)N3653c++14-lang53.319.10*4.916.0 5.14 8.616.1
    澄清内存分配(分配的免除/融合)N3664c++14-langN/A3.4N/AN/A  N/A 8.617.4
    [[deprecated]] 属性N3760c++14-lang4.93.419.0*4.915.0*
    16.0
    13.1.2*5.14 8.616.1
    具大小解分配N3778c++14-lang53.419.0*4.10.117.0 5.14 8.616.1
    单引号作为数位分隔符N3781c++14-lang4.93.419.0*4.1016.013.1.2*5.14 8.62015
    std::result_of 与 SFINAEN3462c++14519.0*N/AN/A 5.158.6N/A
    <complex> 的 constexprN3302c++1453.419.0*N/AN/A 5.15 8.6N/A
    <chrono> 的 constexprN3469c++1453.419.0*N/AN/A 5.15 8.6N/A
    <array> 的 constexprN3470c++1453.419.0*N/AN/A 5.15 8.6N/A
    <initializer_list> 、 <utility> 和 <tuple> 的 constexprN3471c++1453.419.0*N/AN/A 5.15 8.6N/A
    改进的 std::integral_constantN3545c++1453.419.0*N/AN/A 5.15 8.6N/A
    <chrono> 和 <string> 的用户定义字面量N3642c++1453.419.0*N/AN/A 5.15 8.6N/A
    空向前迭代器N3644c++145*3.419.0*N/AN/A 5.15 8.6N/A
    std::quotedN3654c++1453.419.0*N/AN/A 5.15 8.6N/A
    异质关联查找N3657c++1453.419.0*N/AN/A 5.15 8.6N/A
    std::integer_sequenceN3658c++1453.419.0*N/AN/A 5.15 8.6N/A
    std::shared_timed_mutexN3659c++1453.419.0*N/AN/A 5.15 8.6N/A
    std::exchangeN3668c++1453.419.0*N/AN/A 5.15 8.6N/A
    修正无 const 的 constexpr成员函数N3669c++1453.419.0*N/AN/A 5.15 8.6N/A
    std::get<T>()N3670c++1453.419.0*N/AN/A 5.15 8.6N/A
    双范围的 std::equal 、 std::is_permutation 、 std::mismatchN3671c++1453.419.0*N/AN/A 5.15 8.6N/A
    C++14 功能特性
     
    提案
     
    版本
     

    GCC

    Clang

    MSVC

    EDG eccp

    Intel C++

    IBM XLC++

    Sun/Oracle C++

    Embarcadero C++ Builder

    Cray

    Portland Group (PGI)

     

    C++11 功能特性

    C++11 功能特性
     
    提案
     
    版本
     

    GCC

    Clang

    MSVC

    EDG eccp

    Intel C++

    IBM XLC++

    Sun/Oracle C++

    Embarcadero C++ Builder

    Cray

    Portland Group (PGI)

    HP aCC

    Digital Mars C++

     [折叠
    alignasN2341c++114.83.019.0*4.815.013.1.2*5.138.62015  
    alignofN2341c++114.52.919.0*4.815.013.1.2*5.138.42015  
    原子操作N2427c++114.43.117.0*Yes13.013.1.2*5.148.42015  
    autoN1984(v1.0)c++114.4(v1.0)16.0*3.911.0(v0.9)
    12.0(v1.0)
    11.1(v1.0)5.138.42015A.06.25 
    C99 预处理器N1653c++114.319.0*
    (部分:变参宏有漏洞)
    4.111.110.15.98.42015A.06.25
    constexprN2235c++114.63.119.0*
    (部分)
    4.613.0*
    14.0
    12.1*
    13.1
    5.138.42015A.06.28 
    decltypev1.0: N2343

    v1.1: N3276

    c++114.3(v1.0)
    4.8.1(v1.1)
    2.916.0*4.2(v1.0)
    4.8(v1.1)
    11.0(v1.0)
    12.0(v1.1)
    11.1(v1.0)5.138.42015A.06.258.52(v1.0)
    预置和弃置的函数N2346c++114.43.018.0*4.112.013.15.138.42015A.06.25 
    委托构造函数N1986c++114.73.018.0*4.714.011.15.138.42015A.06.28 
    显式转换运算符N2437c++114.53.018.0*4.413.012.15.138.42015A.06.27 
    扩展的 friend 声明N1791c++114.72.916.0*
    (部分)
    18.0*
    4.111.1*
    12.0
    11.15.138.42015A.06.25 
    extern templateN1987c++113.312.0*3.99.011.15.138.42015A.06.25 
    前置 enum 声明N2764c++114.63.117.0*4.511.1*
    14.0
    12.15.138.42015  
    继承的构造函数N2540c++114.83.319.0*4.815.013.1.1*5.138.42015  
    初始化器列表N2672c++114.43.118.0*4.513.0*
    14.0
    13.1.2*5.138.42015A.06.28 
    Lambda 表达式v0.9: N2550

    v1.0: N2658
    v1.1: N2927

    c++114.5(v1.1)3.116.0*(v1.0)
    17.0*(v1.1)
    4.1(v1.1)12.0(v1.1)13.1.2*5.138.42015A.06.25 
    局部及无名类型作为模板形参N2657c++114.52.916.0*4.212.013.1.2*5.138.42015A.06.27 
    long longN1811c++1114.0*8.42015
    内联命名空间N2535c++114.42.919.0*4.514.011.15.138.42015A.06.28 
    新字符类型N2249c++114.42.919.0*4.412.1*
    14.0
    13.1.1*5.138.42015A.06.278.52
    尾随的函数返回类型N2541c++114.42.916.0*4.112.012.15.138.42015A.06.27 
    nullptrN2431c++114.62.916.0*4.212.113.15.138.42015A.06.278.52
    Unicode 字符串字面量N2442c++114.43.019.0*4.711.0*10.1*
    13.1.1*
    5.78.42015A.06.288.52
    原始字符串字面量N2442c++114.518.0*4.714.013.1.1*5.138.42015A.06.288.52
    用户定义字面量N2765c++114.73.119.0*4.815.013.1.2*5.148.42015  
    右角括号N1757c++114.314.0*4.111.012.15.138.42015  
    右值引用v1.0: N2118

    v2.0: N2844
    v2.1: N2844+
    v3.0: N3053

    c++114.3(v1.0)
    4.5(v2.1)
    4.6(v3.0)
    16.0*(v2.0)
    17.0*(v2.1)
    19.0*(v3.0)
    4.5(v3.0)11.1(v1.0)
    12.0(v2.0)
    14.0(v3.0)
    12.1(v2.1)5.138.42015A.06.25 
    static_assertN1720c++114.32.916.0*4.111.011.15.138.42015A.06.258.52
    强类型 enumN2347c++114.42.917.0*4.013.012.15.138.42015A.06.25 
    模板别名N2258c++114.73.018.0*4.212.113.1.1*5.138.42015A.06.27 
    线程局域存储N2659c++114.4*
    4.8
    3.3*
    3.3
    16.0*
    (部分)
    19.0*
    4.811.1*
    15.0*
    10.1*
    13.1.2*
    5.9*8.42015 8.52*
    无限制的联合体N2544c++114.63.019.0*4.614.0*13.1.2*5.138.42015A.06.28 
    类型特征N1836c++114.33.014.0*4.010.013.1.35.138.420156.16 
    变参模板v0.9: N2242

    v1.0: N2555

    c++114.3(v0.9)
    4.4(v1.0)
    2.9(v1.0)18.0*4.3(v0.9)
    4.3(v1.0)
    12.1(v1.0)11.1(v0.9)5.138.42015A.06.27 
    范围 for 循环N2930c++114.63.017.0*4.513.013.1.2*5.138.42015A.06.28 
    override 与 finalv0.8: N2928

    v0.9: N3206
    v1.0: N3272

    c++114.72.914.0* (部分)
    17.0*
    4.8(v1.0)12.0(v0.8)
    14.0(v1.0)
    13.1.1*5.138.42015  
    属性N2761c++114.83.319.0*4.212.113.1.1*5.138.42015A.06.27 
    引用限定符N2439c++114.8.12.919.0*4.714.013.1.2*5.138.42015A.06.28 
    非静态数据成员初始化器N2756c++114.73.018.0*4.614.013.1.2*5.138.42015A.06.28 
    有并发的动态初始化及析构(魔法静态变量N2660c++114.32.919.0*11.1*13.1.2*5.138.42015A.06.25 
    noexceptN3050c++114.63.019.0*4.514.013.1.1*5.138.42015A.06.28 
    垃圾收集与基于可达性的泄漏检测N2670c++11            
    垃圾收集与基于可达性的泄漏检测(库支持N2670c++116
    (无操作)
    3.4
    (无操作)
    19.0*
    (无操作)
    N/AN/A    N/A  
    金额、时间及十六进制浮点 I/O 操纵符时间: N2071

    金额: N2072

    c++1153.819.0*N/AN/A 5.15  N/A  
    C++11 功能特性
     
    提案
     
    版本
     

    GCC

    Clang

    MSVC

    EDG eccp

    Intel C++

    IBM XLC++

    Sun/Oracle C++

    Embarcadero C++ Builder

    Cray

    Portland Group (PGI)

    HP aCC

    Digital Mars C++

     

    引用

    各编译器厂商的兼容性检查单文档(这些通常比以上表格更能反映最新的情况)

    • GCC (更新于 2019-01 )
    • Clang++ (更新于 2017-09 )
    • Microsoft Visual Studio (更新于 2019-01 )
    • Intel C++ (更新于 2017-11 )
    • 并行 STL ( C++17 带执行策略支持的标准库算法的实现)
    • EDG (更新于 2019-03 )
    • Oracle C++ (2017-07 更新)
    • 5.15 中添加了完整 C++14 支持。
    • Oracle 提供对标准库的四种不同实现:
    • libCstd (RogueWave Standard Library version 2), 早于 C++98
    • stlport4 (STLport Standard Library version 4.5.3), 早于 C++03
    • stdcxx4 (Apache Standard Library version 4), 早于 C++11
    • libstdc++ (GCC runtime library, 根据不同发布版本对 C++11 和 C++14 有所支持)
    • IBM XL C++ (更新于 2018-05 )
    • IBM XL C++ for Linux
    • 核心语言支持状况: 13.1.6 起 C++11 完整, 16.1.0 中部分 C++14
    • IBM 在 Linux 上不提供 C++ 标准库实现(使用 GNU libstdc++ )
    • IBM XL C++ for AIX
    • HP aCC
    • Digital Mars C++
    • Embarcadero C++
    • 语言功能特性遵从状况 (RAD Studio 10.1 Berlin) ,包括老式编译器与 Clang 增强编译器(基于 Clang 3.3 )所支持的 C++11 功能特性
    • 语言功能特性遵从状况 (RAD Studio 10.3 Rio) ,包括老式编译器所支持的 C++11 功能特性,和 Clang 增强编译器(基于 Clang 5.0 )所支持的 C++11、 C++14 及 C++17 功能特性
    • Cray (更新于 2018-01 )
    • Portland Group (PGI) (更新于 2019-01 )
    • Texas Instruments (更新于 2018-05 )
    • Analog Devices (更新于 2018-05 )

    转载:https://zh.cppreference.com/w/cpp/compiler_support

    展开全文
  • C++0x 和 C++11的区别

    千次阅读 2020-03-30 11:17:03
    The old -std=c++0x is only needed for older compiler versions that did not support -std=c++11 and they chose that name to express the preliminary and unstable nature of features (and the ABI) of the t...
  • 异常规范 C++11

    千次阅读 2021-02-20 14:22:19
    异常规范 C++11 noexcept throw
  • 【C++】C++11读取写入文件

    千次阅读 2020-02-26 20:35:55
    参考链接: 1、https://www.w3cschool.cn/cpp/cpp-files-streams.html 2、https://blog.csdn.net/jllongbell/article/details/79087281 3、https://blog.csdn.net/buknow/article/details/87973205 ...
  • VS2017如何设置C++11?

    千次阅读 多人点赞 2021-01-25 16:50:47
    【问题】:VS2017如何设置C++11,C++14等不同的标准? 【解决方法】: 1、查看正在使用中的C++标准。 cout << __cplusplus << endl; 我这里显示的初始标准是199711L 2、更改使用新标准 【右击项目】–...
  • Dev C++添加C++11标准

    千次阅读 多人点赞 2019-04-12 19:53:36
    Dev C++添加C++11标准 首先确保Dev C++版本是最新的5.11版 不用C++11标准的语法去运行大多数时候会warning,但是,有时候可能会报错,比如说,不能使用stoll函数,Lambda表达式等等 可以点击菜单栏的“工具”-》...
  • ;Qt中对智能指针的支持,是c++11标准新增的。如何在QtCreator中添加对C++11标准的支持
  • C++ 11初始化vector方法

    千次阅读 2019-05-15 17:40:04
    // C++11 之前通常采用 vector<int> daysInMonth(12); //定义size 为12 daysInMonth[0] = 1; daysInMonth[1] = 2; daysInMonth[2] = 3; daysInMonth[3] = 4; daysInMonth[4] = 5; daysInMonth[5] = 6; ...
  • makefile如何添加c++11标准?

    千次阅读 2020-06-12 10:14:24
    在使用G++编译单个文件时,如果需要c++11标准的支持,直接在编译命令添加-std=c++11。 但是,如果是多个文件联合编译时,使用makefile文件,怎么添加c++11标准? 两种方式: 1)在makefile文件中的每个g++命令中加上...
  • C++11 文件操作(2)写文件ofstream

    千次阅读 2021-02-27 19:42:55
    xxx
  • c++11/14/17标准你了解多少

    万次阅读 多人点赞 2018-09-09 23:08:54
    本文就带你一探c++11新标准。官网链接:https://msdn.microsoft.com/zh-cn/library/hh567368.aspx#featurelist C++11 功能列表 C++11 核心语言功能表 C++11 核心语言功能表:并发 C++11 ...
  • C++11——字符串分割

    万次阅读 2019-02-20 11:15:49
    字符串分割代码示例如下,很显然, 使用了C++11 特性,代码简洁好多 #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;regex&gt; ...
  • 用DevC++ 运行C++ 程序时,出现如下错误error This file requires compiler and library support for the ISO ... This support is currently experimental, and must be enabled with the -std=c++11 or -std=gn...
  • 在新写的采用C++11标准的编译器里,进行编译以后,原来没有任何提示的语句,竟然出现如下问题: char *pName = "NULL"; warning: ISO C++11 does not allow conversion from string literal to 'char *' 我虽然...
  • 解决 VSCode 编写 C++11 代码报红问题

    万次阅读 多人点赞 2021-02-09 10:55:50
    今天在写 C++ 代码的时候用上 C++11 的特性,然后发现 VSCode 虽然可以编译通过,但是会在相应位置报红……
  • C++11: 线程的暂停和继续和停止

    千次阅读 2020-03-18 14:33:43
    当我们执行一个如图片处理视频处理等费时费CPU的操作时,很多时候是将其移到一个线程,并监测其进度,如果这个时候我们需要提供 暂停、恢复、停止的功能,本文就用C++11来实现其功能。 C++11 提供了线程(std::thead...
  • CMAKE支持c++11的两种方式

    千次阅读 2020-12-28 16:48:46
    全局设置 set (CMAKE_CXX_STANDARD 11) ...CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11)
  • 现代C++语言(C++11/14/17)特性总结和使用建议

    千次阅读 多人点赞 2020-12-05 22:42:06
    在此之后,C++经过10多年又孕育出了拥有众多革命性变化的C++11标准(在标准正式发布前,被称为C++0x)。C++11包括了约140个新特性和约600个缺陷的修正。由于其变化实在太大,被很多人称为“现代C++语言”(Modern ...
  • 使devc++拥有c++11的功能(如何让devc++支持c++11)

    万次阅读 多人点赞 2018-09-14 19:19:29
    为什么我的devc++不能使用c++11的一些功能,为什么不能用auto,为什么。。。其实只要加一句命令就好了,具体在哪加往下看,希望对你有帮助噢。 第一步:打开devc++  第二步:点击工具选择编译选项  第三...
  • 我当时以为sleep会导致什么调度问题,后来上网查了下,发现原来不是,std::this_thread::sleep_for只不过是C++11 标准对各个平台的睡眠函数的封装,因为sleep是平台相关的api,它是类UNIX系统提供的,换
  • C++11文件目录操作简介

    千次阅读 2019-03-05 16:01:13
    今天说一下C++11提供的文件目录操作的标准库。 头文件与命名空间: 头文件只需要#include &lt;filesystem&gt; 因为还没有正式进入C++11标准,目前还在TR2里面 命名空间在std::tr2::sys 路径类path...
  • Visual Studio Code支持C++11标准解决方法 在用vscode时经常遇到不支持c++11标准而报错的情形,看网上的博客方法大多说的是在task.json文件里改动,我自己试了半天没有成功,最后是在setting.json进行修改才通过编译...
  • 安装之后需要简单设置一下。 设置方法:Tools - Compiler Options - Settings - Code Generation Lauguage standaerd(-std)选项下拉菜单中选择 GNU C++11 Dev-Cpp 5.4.2下载地址: ...
  • C++ 11 中的几种锁

    万次阅读 2019-08-27 23:16:50
    可以避免多个线程在某一时刻同时操作一个共享资源,标准C++库提供了std::unique_lock类模板,实现了互斥锁的RAII惯用语法: eg: std::unique_lock<std::mutex> lk(mtx_sync_); 条件锁(condition_variable) ...
  • <6>C++11/C++14/C++17 视频精讲

    千人学习 2018-06-04 11:58:40
    C++11是新时代的C++亦称为modern C++,是对C++98扩展。C++11旨在手写简便与提高效率。 大量的企业级项目,己经全部用C++11改写了,比如cocos2dx游戏引擎己经全面拥抱C++11
  • Dev-c++如何支持c++11

    千次阅读 2018-12-02 16:31:06
    如果你用DEV-C++编译C++文件的时候,发现自己出错了,编译器总是告诉你什么standard,c++11的话,说明你的DEV不支持c++11特性,可以这么操作。 在Tools(工具)下面找到compiler options,也就是编译器选项,如下就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,339,084
精华内容 1,735,633
关键字:

c++11

c++ 订阅
友情链接: 学用UNIX机读版.zip