我正在查看glog的文档,并对使用流操作符的方式感到困惑。
LOG(INFO) << "Found " << num_cookies << " cookies";
如何推断所有这些调用是否构成单个日志消息?
根据我的理解,这:
cout << foo << bar << baz;
相当于:
cout << foo;
cout << bar;
cout << baz;
如何在没有特殊分隔符的情况下将链式调用组合在一起?
编辑:
我知道你可以链接它们,为什么有效,这不是我的问题。 我在问glog如何采取
LOG(INFO) << "Found " << num_cookies << " cookies";
对我来说,就像对<<
重载的3次单独调用一样,知道
"Found 3 cookies"
是单个日志消息,而不是3。
答案 0 :(得分:2)
cout << foo
返回cout
然后它变成了
cout << bar << baz;
等等。
另一种看得更清楚的方法是
((cout.operator<<(foo)).operator<<(bar)).operator<<(baz);
这正是发生的事情
您可以在http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/
中看到此信息 ostream& operator<< (double val);
讨论之后,似乎问题更多的是关于gLog如何将每个日志分成没有终结符或任何endl
类型对象的自己的日志条目。
从瞥见logging.h
开始,每个单独的日志可能由不同的流对象写入。
#define PLOG(severity) GOOGLE_PLOG(severity, 0).stream()
这意味着在使用相同的日志对象时,您将写入相同的日志条目。每次调用Log实际上都会创建一个新的流对象。 RAII将负责实际编写已完成的日志,因为这是一个临时对象,它是destroyed after the line of code is executed。
我需要更深入地了解代码以便更好地理解,但看起来这是一个准确的简短答案。问题仍然是(如果是这样)如何优化..