gpt4 book ai didi

c++ - 预处理器宏和 std::source_location 之间的区别

转载 作者:行者123 更新时间:2023-12-01 14:19:57 31 4
gpt4 key购买 nike

有一些预定义的预处理器宏(在 C 和 C++ 标准中指定),如 __line____file__在预处理过程中分别由行号和文件名替换。在 C++20 中,一个新类 std::source_location介绍了它或多或少地做同样的事情。
所以,我的问题是...

  • 它们之间有什么区别?
  • 它们的优点和缺点是什么?
  • 我应该出于什么原因使用哪一个?
  • 最佳答案

    预处理器宏存在于类型系统之外。预处理器宏替换发生在语言的其余部分之外。见 this answerthis answer全面讨论使用预处理器的缺点。std::source_location另一方面,行为就像任何其他 C++ 结构。它具有纯值字段,这些字段的类型和行为与该语言中的任何其他值一样。
    除此之外,在功能方面这两种机制是等效的。没有什么是一个人可以实现的,另一个人不能完成的(除了 source_location 中的 column field ,它在预处理器中没有等价物)。只是新方法可以更好地实现其目标。

    关于c++ - 预处理器宏和 std::source_location 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63683286/

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