【发布时间】:2026-01-30 04:55:01
【问题描述】:
在我目前的项目中,我使用过:
Log(__LINE__, __FUNCTION__, message);
但是新的 C++20 实用程序类std::source_location
带有函数line()、column()、file_name()、function_name(),它们做同样的事情。因此,新的 C++20 方式将是:
log(std::string message,const std::source_location& location = std::source_location::current())
{
std::cout << "Debug:"
<< location.file_name() << ':'
<< location.line() << ' '
<< message << '\n';
}
新的 C++20 方式与旧的标准双下划线宏 __LINE__、__FILE__、__func__ 相比有什么优势? p>
我正在尝试确定优势是否如此之大,以至于有理由修改我当前项目中的代码以使用新的 std::source_location 对象而不是宏。
【问题讨论】:
-
宏可能很危险。它们存在于类型系统之外,并且很难调试。 C++20方式OTOH,在类型系统中退出,更容易调试。
-
通过std::source_location的示例进行完整讨论