可变参数模板和省略号(“...”)标记
在 C 11 中,可变参数模板允许灵活数量的模板参数。定义可变参数模板时,省略号 (...) 标记起着至关重要的作用。
解包与打包
省略号的位置决定其功能:
解包示例
考虑以下可变参数模板函数:
<code class="cpp">template< class T, class... Args > unique_ptr<T> make_unique( Args&&... 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 后面可能还有额外的模板参数(例如非可变参数)。
在函数实现中,省略号放在末尾。用于标记解包参数结尾的表达式,它确保传递任何剩余参数而不将其打包到单个实体中。
其他应用程序
省略号也可以在其他上下文中使用,例如:
以上是省略号 (...) 标记在 C 11 可变参数模板中如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!