代码之家  ›  专栏  ›  技术社区  ›  Walter Svenddal

std::source_location是否保证重用相同的对象?

  •  1
  • Walter Svenddal  · 技术社区  · 5 月前

    我的问题是:如果 std::source_location::current() 对于同一位置被多次调用,是 std::source_location 保证每次通话的对象都是一样的?

    换句话说,给定以下代码:

    #include <source_location>
    #include <iostream>
    #include <format>
    
    void log(const std::source_location& location = std::source_location::current())
    {
        std::cout << std::format("{}\n", static_cast<const void*>(&location));
    }
    
    void func()
    {
        log();
    }
    
    int main()
    {
        func();
        func();
        func();
    }
    

    每一个电话 func() 保证每次打印相同的地址?

    这个问题的目的是找到一种有效的方法来散列一个 std::source_location 对象,理想情况下创建对象的完美哈希值

    1 回复  |  直到 5 月前
        1
  •  2
  •   HolyBlackCat    5 月前

    不,当然不是。 std::source_location::current() 按值返回,它不能保证这一点。