[英]C++, GCC: avoid evaluation of useless expressions
我定義了一個Debug
類(類似於Qt的qDebug
),它帶有一個operator<<
以將數據流傳輸到stdout
。
根據其模板參數(依次取決於宏DEBUG
),將對Debug
進行特殊化:特殊化的operator<<
將打印數據,而另一個特殊化中的一個將保持安靜。
以下是安靜版本:
template< bool quiet = true >
class _Debug
{
public:
template< typename T >
_Debug& operator<<( const T & )
{
return *this;
}
};
我注意到,但是,即使它是安靜版本,也會對operator<<
參數進行評估:
Debug<1>() << "Var " << var.name();
我可以通過分析器看到,運行上面的代碼時,即使Debug<1>
是_Debug
的安靜var.name()
,表達式"Var"
和var.name()
也會被求值。
有什么辦法可以避免這種情況? 也許我應該向GCC傳遞一些選擇權?
我認為使用模板的類似解決方案比使用宏的解決方案更干凈,性能更好,但可能是錯誤的...
我不知道沒有宏怎么能做到這一點。 因此,作為參考,下面是一個類似於google-glog的宏:
#define LOG (quiet) ? (void)0 : your_logging_object
quiet
是布爾值。 然后在代碼的其他地方:
LOG << some_var;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.