名稱空間
變體
操作

std::source_location::current

來自 cppreference.com
< cpp‎ | 工具庫‎ | 源位置
 
 
工具庫
語言支援
型別支援(基本型別、RTTI)
庫特性測試宏 (C++20)
程式工具
變參函式
協程支援 (C++20)
契約支援 (C++26)
三路比較

通用工具
關係運算符 (C++20 中棄用)
整數比較函式
交換型別操作
常用詞彙型別



 
 
static consteval source_location current() noexcept;
(C++20 起)

構造一個對應於呼叫位置的新 source_location 物件。

目錄

[編輯] 引數

(無)

[編輯] 返回值

如果 current() 被直接呼叫(透過命名 current() 的函式呼叫),它返回一個 source_location 物件,其值由實現定義,表示呼叫位置。這些值應以與預定義宏 __LINE____FILE__ 相同的方式受 #line 預處理器指令的影響。

如果 current() 用於預設成員初始化器中,則返回值對應於建構函式定義或聚合初始化中初始化該資料成員的位置。

如果 current() 用於預設引數中,則返回值對應於在呼叫點對 current() 的呼叫位置。

如果 current() 以任何其他方式呼叫,則返回值未指定。

[編輯] 註釋

std::source_location::current 通常需要編譯器的內建實現。

[編輯] 示例

#include <source_location>
#include <iostream>
 
struct src_rec {
    std::source_location srcl = std::source_location::current();
    int dummy = 0;
 
    src_rec(std::source_location loc = std::source_location::current()) :
        srcl(loc)    // values of member refer to the location of the calling function
    {}
    src_rec(int i) : // values of member refer to this location
        dummy(i)
    {}
    src_rec(double)  // values of member refer to this location
    {}
};
 
std::source_location src_clone(std::source_location a = std::source_location::current())
{
    return a;
}
 
std::source_location src_make()
{
    std::source_location b = std::source_location::current();
    return b;
}
 
int main()
{
    src_rec srec0;
    src_rec srec1(0);
    src_rec srec2(0.0);
    auto s0 = std::source_location::current();
    auto s1 = src_clone(s0);
    auto s2 = src_clone();
    auto s3 = src_make();
 
    std::cout
        << srec0.srcl.line() << ' ' << srec0.srcl.function_name() << '\n'
        << srec1.srcl.line() << ' ' << srec1.srcl.function_name() << '\n'
        << srec2.srcl.line() << ' ' << srec2.srcl.function_name() << '\n'
        << s0.line() << ' ' << s0.function_name() << '\n'
        << s1.line() << ' ' << s1.function_name() << '\n'
        << s2.line() << ' ' << s2.function_name() << '\n'
        << s3.line() << ' ' << s3.function_name() << '\n';
}

可能的輸出

31 int main()
12 src_rec::src_rec(int)
15 src_rec::src_rec(double)
34 int main()
34 int main()
36 int main()
25 std::source_location src_make()

[編輯] 參閱

使用實現定義的值構造新的 source_location
(public member function) [編輯]
獲取當前堆疊跟蹤或其給定部分
(std::basic_stacktrace<Allocator> 的公共靜態成員函式) [編輯]