名前空間
変種
操作

std::source_location

From cppreference.com
< cpp‎ | utility
 
 
ユーティリティライブラリ
言語サポート
型のサポート (基本型、RTTI)
ライブラリ機能検査マクロ (C++20)
プログラムユーティリティ
可変引数関数
source_location
(C++20)
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
 
ヘッダー <source_location> で定義
struct source_location;
(C++20以降)

std::source_location クラスは、ファイル名、行番号、関数名など、ソースコードに関する特定の情報を表します。以前は、呼び出し元のサイトに関するこの情報(ロギング、テスト、デバッグ目的)を取得したい関数は、__LINE____FILE__ のような定義済みマクロが呼び出し元のコンテキストで展開されるように、マクロを使用する必要がありました。std::source_location クラスは、より優れた代替手段を提供します。

std::source_locationDefaultConstructibleCopyConstructibleCopyAssignableDestructibleSwappable の要件を満たします。

さらに、以下の条件が true になります。

std::source_location はサイズが小さく、効率的にコピーできることが意図されています。

std::source_location のコピー/ムーブコンストラクタとコピー/ムーブ代入演算子がトリビアルかつ/または constexpr であるかどうかは未規定です。

目次

[編集] メンバ関数

生成
実装定義の値で新しい source_location を構築する
(公開メンバ関数) [編集]
[static]
呼び出し元の位置に対応する新しい 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 日本語 中文(简体) 中文(繁體)