std::source_location::current
來自 cppreference.com
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> 的公共靜態成員函式) |