对于C样式的vararg函数,no。 对于C++样式的vararg模板,是的。 您可以使用sizeof...
运算符来执行此操作。 请参阅CPPreference:
#include <iostream>
template <typename ...Args>
void print_arg_cnt(Args... args)
{
std::cout << "Arg count: " << sizeof ...(Args) << '\n';
}
int main()
{
print_arg_cnt(1, 1.1, 'a');
}
参数计数:3
天机
如果要找出那些参数所占的总字节数,可以这样做:
template <typename ...Args>
void print_args_size(Args... args)
{
auto constexpr size = (sizeof(Args) + ...);
std::cout << "Total size: " << size << '\n';
}
或者尺寸可以像Cigien回答的那样单独打印。
下面是一种打印每个参数类型大小的方法:
template <typename ...Args>
void print_arg_sizes(Args... args)
{
(std::cout << ... << sizeof(Args));
}
int main()
{
print_arg_sizes(42, 4.2, 'a'); // prints 481
}
这是一个演示。