1
是否可以防止功能参数评估? 因为我不想在某些情况下评估函数参数。C++如何防止功能参数评估
E.g. 要记录调试消息,
void log(int severity, ...);
我想记录的消息
log(DEBUG, "%s", getErrorMsg().c_str());
如果严重性DEBUG,日志功能仅仅是在发布二进制返回。 因此,没有必要评估getErrorMsg();
是否可以防止功能参数评估? 因为我不想在某些情况下评估函数参数。C++如何防止功能参数评估
E.g. 要记录调试消息,
void log(int severity, ...);
我想记录的消息
log(DEBUG, "%s", getErrorMsg().c_str());
如果严重性DEBUG,日志功能仅仅是在发布二进制返回。 因此,没有必要评估getErrorMsg();
传递给函数的任何参数都将在进入函数之前始终进行评估。
您可能希望传递类似于指针的东西,因此指针本身就是所评估的内容,并且您只在/必要时通过该指针调用函数。
您可以使用宏:
#define log(severity, ...) if (severity!=DEBUG) log_impl(severity,__VA_ARGS__);
感谢。我可以知道如何声明一个通用函数指针,以便我可以通过吗? –
显然在这种情况下,你需要类似'char const *(*)()'(指向不带参数的函数指针并返回指向char的指针)。虽然有些人不喜欢它,但是如果你有'std :: function',那可能值得考虑。 –
是的。由于log函数接受变量参数,因此参数可以是log(DEBUG,“%d,%s”,iValue,getSth(iValue).c_str());是否有可能迎合所有情况? –