有一个清晰和易于理解的上下文列表,其中数据包扩展可以在cppreference.com上发生。我试图做的是从标准中获得相同的信息,部分是为了获得使用标准的经验。但是,我无法从标准中获取cppreference.com上列出的所有包扩展上下文。可能发生数据包扩展的上下文
cppreference.com列出了以下四个上下文:函数参数列表,模板参数列表,函数参数列表和模板参数列表。
在另一方面,标准说(14.5.3.4):
一包扩展由一个图案和省略号,实例化,其中产生所述图案的零个或多个实例在一个列表中的(如下面所描述的)。模式的形式取决于扩展发生的环境。在以下情况下可能出现包扩展:
- 在函数参数包(8.3.5);该模式是没有省略号的参数声明。
- 在模板参数组是一包扩展(14.1):
- 如果模板参数包是一个参数声明;该模式是没有省略号的参数声明;
- 如果模板参数包是带有模板参数列表的类型参数;该模式是没有省略号的相应类型参数。
- ...
- 在模板参数列表(14.3)中;该模式是一个模板参数。
- ...
我无法找出标准说,包扩展可以在功能参数列表出现。我想这种情况在某种程度上被上面引用的三个要点之一所覆盖。
以防万一,目前还不清楚我在函数的参数列表包扩展的意思,请看下面的例子:
template <typename ...Args> void f(Args ...args) {}
template <typename ...Args> void g(Args ...args) {
f(args...); // Pack expansion in a function argument list.
}
你是指当一个函数被调用?例如。 'f(some_pack ...)' –
@VittorioRomeo正确地,请参阅问题中提到的[cppreference.com页面](http://en.cppreference.com/w/cpp/language/parameter_pack)。我正在讨论“函数参数列表”标题下的例子。 – user1494080
可能的完整解释在这里http://en.cppreference.com/w/cpp/language/parameter_pack请参阅“扩展基因座” –