c ++如何防止功能参数评估

时间:2012-08-24 05:48:28

标签: c++

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

E.g。 要记录调试消息,

void log(int severity, ...);

我想记录一条消息

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

如果严重性为DEBUG,则日志功能只是以发布二进制文件返回。 因此,没有必要评估getErrorMsg();

2 个答案:

答案 0 :(得分:1)

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

您可能希望传递类似指针的内容,因此指针本身就是被评估的内容,并且您只在/必要时通过该指针调用函数。

答案 1 :(得分:1)

您可以使用宏:

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