以下使用lambda表达式的方式是否错误、脆弱或愚蠢?它在VC++ 2012上运行正常,但我担心有一些变量参数/lambda栈交互会使其变得危险。
class
ArgumentException : public std::runtime_error
{
public:
ArgumentException(
const char* format_,
... )
: std::runtime_error(
[&]()
{
char buffer[2048];
va_list arguments;
va_start ( arguments, format_ );
int writtenCount = vsnprintf( buffer, 2048, format_, arguments );
va_end ( arguments );
return std::string(buffer);
}() )
{
}
};
buffer
的指针。至于在具有捕获参数的 lambda 函数中使用va_list
,那是一个有趣的问题。我知道一些好的方法可以实现类似的效果,但你的方法不是其中之一。 - zneakva_list
只是为C代码而存在,而C++则不鼓励使用它们。但我不确定... - Wagner Patriota