gpt4 book ai didi

c++ - 日志记录性能和运算符<<

转载 作者:可可西里 更新时间:2023-11-01 17:45:22 26 4
gpt4 key购买 nike

我为开源 C++ 应用程序做贡献。在该应用程序中,所有日志记录都使用诸如

之类的行完成
if (Debug) std::cout << "MyClass | my debug message" << MyExpensiveStringConvertion() << std::endl;

用于使用更高级的日志记录框架(在其他语言中)我建议使用现有的框架之一,例如 boost、easylogginppp,任何可以自动格式化并可以在运行时配置的框架。

但有人回答说,在编写时使用“if (Debug)”几乎没有开销

Log(debug) << "MyClass | my debug message" << MyExpensiveStringConvertion() 

在禁用日志记录时需要计算 << 运算符和 MyExpensiveStringConvertion() 事件。这个论点正确吗?如果它是正确的,我们应该关心吗?看起来大多数日志框架都是这样工作的,所以显然大多数开发人员并不关心

更新:我知道 if (Debug) 表单只需要一个简单的 bool 测试,但我期待日志记录框架能够实现各种技巧来降低成本,例如“#define LOG(level) if (doDebug(level)) Log (水平)”,Dietmar Kühl 提到了这一点。

最佳答案

输出操作前面没有条件的关键问题是所有的参数都被评估。很容易短路实际的输出操作(只需确保 Log(debug) 返回一个状态为 std::ios_base::failbit 的流)但是评估所有参数往往会涉及您不想在日志记录期间花费的开销。当然,您可以使用诸如

#define LOG(level) if (doDebug(level)) Log(level)

...然后使用

LOG(debug) << "MyClass | my debug message" << MyExpensiveStringConversion();

关于c++ - 日志记录性能和运算符<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27216594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com