c++如何防止函数参数求值

c++ how to prevent function parameter evaluation

本文关键字:参数 函数 何防止 c++      更新时间:2023-10-16

是否可以阻止函数参数评估?因为我不想在某些情况下评估函数参数。

例如。要记录调试消息,

void log(int severity, ...);

我想记录一条消息

log(DEBUG, "%s", getErrorMsg().c_str());

如果严重性为DEBUG,则日志函数只是以二进制版本返回。因此,没有必要评估getErrorMsg();

传递给函数的任何参数都将在进入函数之前进行求值。

您可能想要传递类似指针的东西,因此指针本身就是要计算的值,并且只有在必要时才能通过该指针调用函数。

您可以使用宏:

#define log(severity, ...) if (severity!=DEBUG) log_impl(severity,__VA_ARGS__);