Tôi đang sử dụng mô-đun ghi nhật ký có thể bật/tắt báo cáo khi chạy. Các cuộc gọi thường diễn ra như sau:Tối ưu hóa trình biên dịch C++ của các đối số đã qua
WARN(
"Danger Will Robinson! There are "
+ boost::lexical_cast<string>(minutes)
+ " minutes of oxygen left!"
);
Tôi đang sử dụng chức năng nội tuyến cho WARN, nhưng tôi tò mò về mức độ tối ưu hóa của các đối số trong toàn bộ chương trình tốn kém. Chức năng WARN
đi một cái gì đó như thế này:
bool WARNINGS_ENABLED = false;
inline void WARN(const string &message) {
if (!WARNINGS_ENABLED) {
return;
}
// ...
}
Cho rằng xây dựng các đối số chuỗi không có tác dụng phụ, trình biên dịch sẽ tối ưu hóa nó ra? Yêu cầu tối ưu hóa mức độ nhất định (-Ox
trong số g++
cho một số x
)?
Điều đó sẽ hoạt động tốt. –
Đúng - một tình huống rõ ràng khi macro cần được sử dụng trên các hàm nội dòng. – cdleary
+1 nhưng điều này thực sự là: #define WARN (s) làm {if (WARNINGS_ENABLED) WARN2 (s); } trong khi (false) –