是否可以防止功能参数评估? 因为在某些情况下我不想评估函数参数。
E.g。 要记录调试消息,
void log(int severity, ...);
我想记录一条消息
log(DEBUG, "%s", getErrorMsg().c_str());
如果严重性为DEBUG,则日志功能只是以发布二进制文件返回。 因此,没有必要评估getErrorMsg();
答案 0 :(得分:1)
传递给函数的任何参数将始终在进入函数之前进行求值。
您可能希望传递类似指针的内容,因此指针本身就是被评估的内容,并且您只在/必要时通过该指针调用函数。
答案 1 :(得分:1)
您可以使用宏:
#define log(severity, ...) if (severity!=DEBUG) log_impl(severity,__VA_ARGS__);