簡體   English   中英

C ++,GCC:避免評估無用的表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM