我有一些代碼,撒上這樣短路`運營商<<`在C++輸出
if(debug) {
Output << "f1: " << f1() << "\n";
}
現在可以構建什麼,我想要做的就是寫一個流類Debug
在那裏我可以寫這樣的
Debug << "f1: " << f1() << "\n";
如果設置了某個全局標誌,則會生成輸出,否則將生成輸出。
現在:這可以通過使Debug
返回一個流到/dev/null
這將吞下輸出很容易完成。問題在於f1()
仍然會被評估(並且「渲染」爲可能更昂貴的文本表示),這可能對性能非常不利。
現在我的問題:是否有允許的
"f1: " << f1() << "\n"
完全如果Debug
決定「評價」的跳躍,沒有輸出應該做任何把戲?到短路是C++確實爲f() && g()
其中g()
不評估,如果f()
是false
類似
&&
作爲輸出操作,但是從我讀短路流類未重載
operator&&
完成)
[This related question](http://stackoverflow.com/questions/11826554/standard-no-op-output-stream)從今天早些時候可能會有解決方案。 – juanchopanza 2012-08-06 17:23:25
@juanchopanza:那些問題仍然(可能)評估論據。我不認爲這可以按照要求來完成,除非您將格式切換爲類似'DEBUGOUT(「f1:」<< f1()<<「\ n」);' – 2012-08-06 17:30:18
@MooingDuck爲true。他們只避免流媒體。 – juanchopanza 2012-08-06 17:31:43