当前位置: 首页 > 知识库问答 >
问题:

C++17中有哪些新特性?

赫连俊悟
2023-03-14

哪些特性是在C++17中添加到C++中的?

当使用支持“C++1Z”的C++编译器时,当编译器更新到C++17时,这些功能中的哪些是可用的?

共有1个答案

单于帅
2023-03-14

>

  • 类模板的模板参数推演

    • 就像函数如何推导模板参数一样,现在构造函数也可以推导类的模板参数
    • http://WG21.link/P0433r2 http://WG21.link/P0620r0 http://WG21.link/P0512r0

    模板

      null

    (折叠+...+表达式)和修订

    auto{8};int

    使用...和列表更新

      null
    • [*this]{std::cout<<可能<<“是”<<有用<<'\n';}

    >

  • [[fallthrough]],[[nodiscard]],[[maybe_unused]]属性

    命名空间[[s]]枚举{erator[[s]]}

    在属性中使用以避免重复属性命名空间。

    编译器现在被要求忽略他们无法识别的非标准属性。

    • C++14的措辞允许编译器拒绝未知范围的属性。

    >

  • 内联变量

      null

    简单的static_assert(expression);不带字符串

    除非throw(),否则没有throw,并且throw()noexcept(true)

    >

  • 结构化绑定

    • 基本上,具有auto
    • 的一流std::tie
    • 示例
      • const auto[it,inserted]=map.insert({“foo”,bar});
      • 根据map::insert返回的创建具有推导类型的变量itinsert
      • if(const auto[it,inserted]=map.insert({“foo”,bar});inserted)
      • if(decl)扩展到decl不能合理转换为bool的情况。

      基于范围的循环泛化

      • 似乎主要支持与begin迭代器类型不同的哨兵或结束迭代器,这有助于处理以空结束的循环等。
        null

      过对齐数据的动态内存分配

      保证副本删除

      • 终于!
      • 不是在所有情况下,但会将“只是创建一些东西”的语法(称为elision)与“真正elision”区分开来。
        null
      • 我认为这是在说“实现可能不会永远停止线程”?

      U8“U”,U8“T”,U8“F”,U8“8”字符文字(字符串已存在)

      类型系统中的“NoExcept”

        null

      使用继承聚合初始化。

      std::launder、类型双关语等

      >

    • std::variant

        null
        null
        null

      std::string_view

      • std::string类似于对字符数组或子字符串的引用
      • 永远不要再使用字符串常量&。还可以使解析速度提高数亿倍。
      • “Hello World”SV
      • constexprchar_traits

      std::byte超出了它们所能咀嚼的范围。

        null
        null
        null

      is_invocable,is_invocable_r,invoke_result

      • http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2016/p0077r2.html
      • http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2017/P0604R0.html
      • 不推荐使用result_of
      • is_invocable 是“是否可以使用args...调用foo并获得与r兼容的内容”,其中r=void是默认值。
      • invoke_result std::result_of_t 但显然不太容易混淆?

      >

    • [class.path]

      [class.fileSystem.error]

      [class.file_status]

      [class.directory_entry]

      reduce

      transform_reduce

      exclusive_scan

        null

      原子 ::is_always_lockfree

      scoped_lock

      • 在一次锁定多个互斥体时,可省去一些std::lock的麻烦。
        null

      硬件_*_Interference_Size

      • [func.searchers][alg.search]
          一种搜索算法和技术

        [pmr]

        • 多态分配器,如用于分配器的std::function
        • 和一些标准内存资源。
        • http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2016/p0358r1.html
          null
        • 在容器之间便宜地移动节点。
        • 以低廉的价格合并整个容器。

        字符串的非常量.data()

        非成员std::size,std::empty,std::data

        • std::begin/end

        容器中最小的不完整类型支持

        连续迭代器“概念”

          null
          null

        >

      • C++17库基于C11而不是C99

        为将来的标准库保留标准[0-9]+

        destroy(_at_n),uninitialized_move(_n),uninitialized_value_construct(_n),uninitialized_default_construct(_n)

        • 工具代码已在大多数std公开的实现中
        • 科学家可能会喜欢它们
        • std::clamp(a,b,c)==std::max(b,std::min(a,c))大致
          null
          null
          null
        • http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2016/p0358r1.html
        • 交换
        • is_aggregate
        • has_unique_object_representations
        • 某些C库,
        • memory_order_consument
        • result_of,替换为invoke_result
        • shared_ptr::unique,它不是非常安全的线程

        从SD-6特征测试列表中掠夺的其他条目。

        Clang的特征列表和库特征列表是下一个被掠夺的。这似乎不太可靠,因为它是C++1z,而不是C++17。

        这些幻灯片在其他地方缺少了一些功能。

          null

        P0512R0(模板参数推演调整)

        P0490R0(结构化绑定调整)

        P0513R0(更改为std::hash)

        P0497R0(共享ptr调整)

        P0508R0(结构化绑定节点句柄)

        P0521R0(共享指针使用计数和唯一更改?)

          null
          null

  •  类似资料:
    • 本文向大家介绍请问C++11有哪些新特性?相关面试题,主要包含被问及请问C++11有哪些新特性?时的应答技巧和注意事项,需要的朋友参考一下 C++11 最常用的新特性如下: auto关键字:编译器可以根据初始值自动推导出类型。但是不能用于函数传参以及数组类型的推导 nullptr关键字:nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型;而NULL一般被宏定义为0,在遇到重载时

    • 本文向大家介绍React16新特性有哪些?相关面试题,主要包含被问及React16新特性有哪些?时的应答技巧和注意事项,需要的朋友参考一下 1.使用Error Boundary处理错误组件 2.render支持2种新的返回类型(数组、字符串) 3.使用createProtal 将组件渲染到当前组件树之外 4.自定义DOM属性 :把不会识别的属性传递给DOM 5.setState传入null时不会再

    • 本文向大家介绍CSS3新特性有哪些?相关面试题,主要包含被问及CSS3新特性有哪些?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 开放题。CSS3边框如border-radius,box-shadow等;CSS3背景如background-size,background-origin等;CSS3 2D,3D转换如transform等;CSS3动画如animation等。 参考https:

    • 本文向大家介绍css3有哪些新特性?相关面试题,主要包含被问及css3有哪些新特性?时的应答技巧和注意事项,需要的朋友参考一下 1)CSS3 实现圆角(border-radius:8px;), 2)阴影(box-shadow:10px), 3)对文字加特效(text-shadow), 4)线性渐变(gradient), 5)旋转(transform), 6)transform:rotate(9de

    • 本文向大家介绍HTML5有哪些的新特性?相关面试题,主要包含被问及HTML5有哪些的新特性?时的应答技巧和注意事项,需要的朋友参考一下 HTML5中最有趣的新特性: 二维画图中的 元素 媒体播放的 和 元素 支持本地存储 新的内容特定元素,如  

    • 本文向大家介绍CSS3有哪些新增的特性?相关面试题,主要包含被问及CSS3有哪些新增的特性?时的应答技巧和注意事项,需要的朋友参考一下 圆角: border-radius 盒子阴影: box-shadow 文字阴影: text-shadow 2d,3d转换: transform 动画: Keyframes规则 盒子模型: display:flex 媒体查询: meta