C ++ 20 std::source_location
C ++はついに非マクロオプションを追加しました。C++ 20が普及する将来のある時点で、それが支配的になる可能性があります。
ドキュメントは言う:
constexpr const char * function_name()const noexcept;
6戻り値:このオブジェクトが関数の本文内の位置を表す場合、関数名に対応する実装定義のNTBSを返します。それ以外の場合は、空の文字列を返します。
ここで、NTBSは「Null Terminated Byte String」を意味します。
サポートがGCCに届いたら、GCC 9.1.0 g++-9 -std=c++2a
がまだサポートされていないときに試してみます。
https://en.cppreference.com/w/cpp/utility/source_locationの使用法は次のようになります。
#include <iostream>
#include <string_view>
#include <source_location>
void log(std::string_view message,
const std::source_location& location std::source_location::current()
) {
std::cout << "info:"
<< location.file_name() << ":"
<< location.line() << ":"
<< location.function_name() << " "
<< message << '\n';
}
int main() {
log("Hello world!");
}
可能な出力:
info:main.cpp:16:main Hello world!
__PRETTY_FUNCTION__
vs __FUNCTION__
vs __func__
vsstd::source_location::function_name
回答:__PRETTY_FUNCTION __、__ FUNCTION __、__ func__の違いは何ですか?