Joh*_*itb 15 c++ templates variadic-templates c++11
我正在编写一个函数模板
template<typename ...T>
void f(T ...t) {
X x(t...);
// ...
}
Run Code Online (Sandbox Code Playgroud)
当我看着它时,我想知道电话会发生什么f().请问烦恼的解析会使xa函数声明吗?编译器似乎使它成为一个变量.有人可以帮我确定一下吗?
Xeo*_*Xeo 13
空括号(())只有在源代码中编写时才会使它成为函数声明.
§14.5.3 [temp.variadic] p6 还提到了这个:
不是sizeof ...表达式的包扩展的实例化产生列表E1,E2,...,EN,其中N是包扩展参数中的元素的数量.[...]当N为零时,扩展的实例化会产生一个空列表.这样的实例化不会改变封闭结构的句法解释,即使在完全省略列表否则会形成错误或会导致语法模糊的情况下.[ 例如:
Run Code Online (Sandbox Code Playgroud)template<class... T> struct X : T... { }; template<class... T> void f(T... values) { X<T...> x(values...); } template void f<>(); // OK: X<> has no base classes // x is a variable of type X<> that is value-initialized- 末端的例子 ]
具体请参见示例代码中的第二条注释.