コンテンツにスキップ

C++/標準ライブラリ/source location

出典: フリー教科書『ウィキブックス(Wikibooks)』

はじめに[編集]

ヘッダー <source_location> は、C++23 で導入されたもので、ソースコードの位置情報 (source location) を取得するための source_location クラスを定義します。この情報はデバッグやエラー報告などに役立ちます。

ヘッダー <source_location> の概要[編集]

  • ソースコードの位置情報を表す source_location クラスを定義します。
  • ソースファイル名、行番号、列番号、関数名などの情報が得られます。
  • コンパイラによって実際に取得できる情報量は異なる場合があります。

source_location クラスの詳細:[編集]

  • source_location クラスは、コピー可能で、ムーブ可能で、スワップ可能です (C++17 の機能)。
  • コンストラクタは 2 種類あり、以下の情報を含みます。
    • source_location::current(): 呼び出された箇所 (関数内など) の情報。
    • source_location(): 未定義の情報を持つオブジェクト。
  • メンバ関数を使って、ソースファイル名 (file_name())、行番号 (line())、列番号 (column())、関数名 (function_name()) を取得できます。
  • 取得できる情報は実装定義であり、すべてのコンパイラで同じ情報が得られるわけではありません。
使用例
C++
#include <iostream>
#include <source_location>

void print_location(const std::source_location& loc) {
    std::cout << "File: " << loc.file_name() << std::endl;
    std::cout << "Line: " << loc.line() << std::endl;
    std::cout << "Column: " << loc.column() << std::endl;
    std::cout << "Function: " << loc.function_name() << std::endl;
}

auto main() -> int {
    std::source_location const loc = std::source_location::current();
    print_location(loc);
    return 0;
}

このコードは、呼び出された場所の情報 (loc) を取得し、 print_location 関数を使ってソースファイル名、行番号、列番号、関数名を出力します。

補足[編集]

  • コンパイラによっては、すべての情報が取得できない場合や、列番号が常に 0 になるなど、制限がある可能性があります。
  • デバッグやエラー報告以外の用途でも、ソースコードの位置情報を利用できます。