0
我使用流媒體運算符(例如operator<<(const char*)
)進行記錄。在我的單元測試中,我有如下測試:什麼時候計算參數,當連接調用時:obj.F1()。F2()。F3(sin(x))?
MyLogger oLogger;
oLogger << "charly";
oLogger << "foo" << sleep(10) << "bar";
oLogger << "marcus";
首先我執行了第二個線程,它應該同時登錄。我想知道,爲什麼"foo"
和"bar"
之間沒有生成其他的日誌輸出。所以我在當前時間在每個操作員身上打印。我希望這樣的事情:
50 sec 137051 usec charly
50 sec 137930 usec foo
60 sec 138014 usec 0
60 sec 138047 usec bar
60 sec 138088 usec marcus
但得到這樣的:
50 sec 137051 usec charly
60 sec 137930 usec foo
60 sec 138014 usec 0
60 sec 138047 usec bar
60 sec 138088 usec marcus
有什麼不對的以下想法:
[ 0 sec] MyLogger& MyLogger::operator<<("charly") is processed.
[ 0 sec] MyLogger& MyLogger::operator<<("foo") is processed.
The return value is used for the next function.
[ 0 sec] int sleep(10) is processed - this takes 10 seconds until the return
value is available
[10 sec] MyLogger& MyLogger::operator<<(0) is processed
("0" is the return value of sleep(10))
[10 sec] MyLogger& MyLogger::operator<<("bar") is processed
但是什麼原因如初,MyLogger::operator<<("foo")
後處理sleep(10)
?
它似乎沒什麼特別的流,建立與普通方法相同的例子時,也是所有參數都首先計算...:■ – Charly
'double x = 0; oClass.PrintAndIncrement(x).Print(sin(x));' 將輸出'0 0' ''double x = 0; oClass.PrintAndIncrement(X); oClass.Print(sin(x));' 打印'0 0.841472'。 – Charly