首页 > 后端开发 > C++ > 省略号 (...) 标记在 C 11 可变参数模板中如何工作?

省略号 (...) 标记在 C 11 可变参数模板中如何工作?

Barbara Streisand
发布: 2024-10-30 01:03:28
原创
771 人浏览过

How does the ellipsis (...) token work in C  11 variadic templates?

可变参数模板和省略号(“...”)标记

在 C 11 中,可变参数模板允许灵活数量的模板参数。定义可变参数模板时,省略号 (...) 标记起着至关重要的作用。

解包与打包

省略号的位置决定其功能:

  • 解包(右侧): 当在表达式的右侧使用时,...解包模板参数包。解包模式以逗号分隔,替换实际函数调用中的省略号。
  • 打包(左侧): 当放置在左侧时,... 将参数打包到模板参数包。打包的参数在函数中可作为单个实体使用。

解包示例

考虑以下可变参数模板函数:

<code class="cpp">template< class T, class... Args >
unique_ptr<T> make_unique( Args&amp;&amp;... args )
{
    return unique_ptr<T>(new T(std::forward<Args>(args)...));
}</code>
登录后复制

当使用多个参数调用 make_unique 时,省略号(在 std::forward(Args>(args)... 中)允许函数接受可变数量的参数。省略号解压 Args 参数包,从而产生以下扩展表达式:

<code class="cpp">std::forward<Arg0>(arg0), std::forward<Arg1>(arg1), ...</code>
登录后复制

模板和函数参数中的省略号位置

在模板参数列表中,省略号放置在中间,表示参数pack 在函数参数列表中继续。这是因为可变参数 pack 后面可能还有额外的模板参数(例如非可变参数)。

在函数实现中,省略号放在末尾。用于标记解包参数结尾的表达式,它确保传递任何剩余参数而不将其打包到单个实体中。

其他应用程序

省略号也可以在其他上下文中使用,例如:

  • 使用可变参数初始化器创建数组
  • 定义从多个基类继承的类(通过公共 Mixins... 语法)

以上是省略号 (...) 标记在 C 11 可变参数模板中如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板