zoukankan      html  css  js  c++  java
  • C++ 14 新特性总结

    转载自: http://www.codeceo.com/article/cpp-14-new-features.html

    C++14 这一继C++11 之后的新的 C++ 标准已经被正式批准,正在向 ISO 提交,将于年内发布。C++之父 Bjarne Stroustrup 说道,尽管与C++11 相比,C++14 的改进“有意做的比较小”,但是仍然为用户“带来了极大的方便”,是实现使C++“对新手更为友好”这一目标的步骤之一。

    在 C++ 的时间表中,C++14 按计划是一个小版本,完成制定C++11 标准的剩余工作,目的是使 C++ 成为一门更清晰、更简单和更快速的语言。新的语言特性留到了未来的C++17 标准中。

    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“完全实现了当前草案的所有内容”;GCC 和 Visual Studio 也对C++14 的新特性提供了一些支持。

  • 相关阅读:
    Cards CodeForces 399C
    CodeForces 25D Roads not only in Berland
    【转】别人家的八数码 A* IDA*解法
    Maze Stretching Poj3897 二分+BFS
    Data Handler 大模拟 + 双端链表 hdu 4268
    黑马程序员---java基础语法--流程控制与函数
    黑马程序员--java基础--其他对象
    黑马程序员------java基础----集合
    黑马程序员---java基础-----多态、内部类、异常、包
    黑马程序员--java基础------继承,抽象,接口
  • 原文地址:https://www.cnblogs.com/coder-zhang/p/3970059.html
Copyright © 2011-2022 走看看