std::source_location
出自 cppreference.com
| 定義於標頭檔 <source_location> |
||
| struct source_location; |
(自 C++20 起) | |
std::source_location 類別代表了有關原始程式碼的特定資訊,例如檔案名稱、行號與函式名稱。過去,希望取得關於呼叫點(call site)相關資訊的函式(用於紀錄、測試或除錯目的)必須使用巨集,以便讓諸如 __LINE__ 與 __FILE__ 之類的預定義巨集在呼叫者的上下文中展開。std::source_location 類別提供了一個更好的替代方案。
std::source_location 符合 預設可建構 (DefaultConstructible)、可複製建構 (CopyConstructible)、可複製賦值 (CopyAssignable)、可解構 (Destructible) 以及 可交換 (Swappable) 的需求。
此外,下列條件為 true
- std::is_nothrow_move_constructible_v<std::source_location>,
- std::is_nothrow_move_assignable_v<std::source_location>,以及
- std::is_nothrow_swappable_v<std::source_location>.
std::source_location 的設計目的在於使其體積小且能被高效地複製。
std::source_location 的複製/移動建構函式以及複製/移動賦值運算子是否為 trivial(平凡)及/或 constexpr,皆未定義。
目錄 |
[編輯] 成員函式
建立 | |
建立一個具有實作定義值的新 source_location(公開成員函式) | |
| [靜態] |
建立一個對應於呼叫點位置的新 source_location(公開靜態成員函式) |
欄位存取 | |
| 回傳此物件所代表的行號 (公開成員函式) | |
| 回傳此物件所代表的欄號 (公開成員函式) | |
| 回傳此物件所代表的檔案名稱 (公開成員函式) | |
| 回傳此物件所代表的函式名稱(若有) (公開成員函式) | |
[編輯] 附註
| 功能測試巨集 | 數值 | 標準 | 功能 |
|---|---|---|---|
__cpp_lib_source_location |
201907L |
(C++20) | 原始程式碼資訊擷取 (std::source_location) |
[編輯] 範例
執行此程式碼
#include <iostream> #include <source_location> #include <string_view> void log(const std::string_view message, const std::source_location location = std::source_location::current()) { std::clog << "file: " << location.file_name() << '(' << location.line() << ':' << location.column() << ") `" << location.function_name() << "`: " << message << '\n'; } template<typename T> void fun(T x) { log(x); // line 20 } int main(int, char*[]) { log("Hello world!"); // line 25 fun("Hello C++20!"); }
可能輸出
file: main.cpp(25:8) `int main(int, char**)`: Hello world! file: main.cpp(20:8) `void fun(T) [with T = const char*]`: Hello C++20!
[編輯] 參見
| 變更原始程式碼的行號,並可選擇變更當前檔案名稱 (前處理器指示詞) | |
| (C++23) |
堆疊追蹤中求值結果的表示 (類別) |