std::source_location::current
From cppreference.com
< cpp | utility | source location
| static consteval source_location current() noexcept; |
(C++20以降) | |
呼び出し元の位置に対応する新しいsource_locationオブジェクトを構築します。
目次 |
[編集] パラメータ
(なし)
[編集] 戻り値
current()が直接(current()という名前の関数呼び出しを介して)呼び出された場合、呼び出し元の位置を表す実装定義値を持つsource_locationオブジェクトを返します。これらの値は、プリプロセッサディレクティブ#lineによって、組み込みマクロ__LINE__および__FILE__と同様の方法で影響を受けるべきです。
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) | |
| [static] |
現在のスタックトレースまたはその一部を取得する ( std::basic_stacktrace<Allocator>のpublic static member function) |