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());是否有可能迎合所有情況? –