命名空間
變體
動作

std::source_location

出自 cppreference.com
< cpp‎ | 工具
 
 
 
 
定義於標頭檔 <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::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!

[編輯] 參見

變更原始程式碼的行號,並可選擇變更當前檔案名稱
(前處理器指示詞)[編輯]
堆疊追蹤中求值結果的表示
(類別) [編輯]
English Deutsch 日本語 中文(简体) 中文(繁體)