提问者:小点点

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


这个问题的答案是C没有提供任何方法来检测通过省略号传递的参数的大小:
如何检测通过省略号传递的参数的大小?

这个问题有C++解决方案吗?


共2个答案

匿名用户

对于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
}

这是一个演示。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|检测|省略号|传递|参数|大小)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?