如何检测C++中通过省略号传递的参数的大小

  • 本文关键字:参数 省略号 C++ 何检测 c++
  • 更新时间 :
  • 英文 :


这个问题的答案是,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
}

这是一个演示。

最新更新