Namespaces
Variants

std::source_location

cppreference.net에서 가져옴
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐지됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
스왑 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
struct source_location;
(C++20부터)에 정의됨

클래스 std::source_location는 파일 이름, 줄 번호, 함수 이름과 같은 소스 코드에 대한 특정 정보를 나타냅니다. 이전에는 호출 지점에 대한 이 정보를 얻기 위해 (로깅, 테스트 또는 디버깅 목적으로) 함수가 매크로를 사용해야 했으며, 그래야 호출자의 맥락에서 사전 정의된 매크로인 __LINE__와 __FILE__가 확장되었습니다. std::source_location 클래스는 더 나은 대안을 제공합니다.

std::source_location는 DefaultConstructible, CopyConstructible, CopyAssignable, Destructible 및 Swappable 요구 사항을 충족합니다.

또한, 다음 조건이 true입니다:

  • std::is_nothrow_move_constructible_v<std::source_location>,
  • std::is_nothrow_move_assignable_v<std::source_location>, 및
  • std::is_nothrow_swappable_v<std::source_location>.

std::source_location는 작은 크기를 가지며 효율적으로 복사될 수 있도록 의도되었습니다.

std::source_location의 복사/이동 생성자와 복사/이동 할당 연산자가 사소하고/또는 constexpr인지 여부는 명시되지 않습니다.

멤버 함수

생성
구현 정의 값으로 새로운 source_location 을 생성함
(public member function)
[static]
호출 위치에 해당하는 새로운 source_location 을 생성함
(public static member function)
필드 접근
이 객체가 나타내는 줄 번호를 반환함
(public member function)
이 객체가 나타내는 열 번호를 반환함
(public member function)
이 객체가 나타내는 파일 이름을 반환함
(public member function)
이 객체가 나타내는 함수 이름을 반환함 (있는 경우)
(public member function)

참고 사항

기능 테스트 매크로 값 표준 기능
__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!

참고 항목

소스 코드의 줄 번호와 선택적으로 현재 파일 이름을 변경합니다
(전처리기 지시문)
스택 트레이스에서 평가의 표현
(클래스)