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

C++ c++;如何防止函数参数求值,c++,C++,是否有可能阻止功能参数评估? 因为我不想在某些情况下计算函数参数 例如。 要记录调试消息 void log(int severity, ...); 我想记录一条消息 log(DEBUG, "%s", getErrorMsg().c_str()); 如果严重性为DEBUG,则log函数仅返回版本二进制文件。 因此,不需要计算getErrorMsg() 传递给函数的任何参数都将始终在进入函数之前求值 您可能希望传递指针之类的内容,因此指针本身就是计算的对象,并且您仅在必要时通过该指针调用函数。您

是否有可能阻止功能参数评估? 因为我不想在某些情况下计算函数参数

例如。 要记录调试消息

void log(int severity, ...);
我想记录一条消息

log(DEBUG, "%s", getErrorMsg().c_str());
如果严重性为DEBUG,则log函数仅返回版本二进制文件。
因此,不需要计算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());迈克尔:不,不太可能,至少在没有其他实质性变化的情况下。我想您可能可以使用表达式模板来设计一些东西,但这不是一件小事,而且几乎需要至少对语法进行一些更改