这个问题的答案是,C没有提供任何方法来检测通过省略号传递的参数的大小:
如何检测通过省略号传递的变量的大小?
这个问题有C++解决方案吗?
对于C风格的vararg函数,否。对于C++风格的varorg模板,是。您可以使用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
Godbolt
如果你想找出这些参数占据的字节总数,你可以这样做:
template <typename ...Args>
void print_args_size(Args... args)
{
auto constexpr size = (sizeof(Args) + ... + 0); // +0 for the empty case
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
}
这是一个演示。