개발자가 함수 반환값을 반드시 사용해야 하는 상황에서 실수를 방지하도록 돕는 도구이다.
[[nodiscard]] int GetID(const std::wstring& userName)
{
return DB.Get(userName);
}
int main()
{
GetID(L"Kim");//반환값이 사용되지 않음
int my_ID = GetID(L"Lee"); // 반환값이 사용됨
}
이런 경우일 때 사용되고 추가로
[[nodiscard("사용자에 대한 ID를 사용하지 않고 있습니다!")]]
int GetID(const std::wstring& userName)
{
return DB.Get(userName);
}
위와 같이 메시지를 추가하여 경고문으로 사용할 수 있다.
함수가 반환하지 않을 것임을 컴파일러에 명시적으로 알리는 데 사용됩니다. 주로 프로그램 실행을 종료하거나, 무한 루프를 실행하거나, 예외를 던지는 함수에 적용된다.
1.프로그램 종료함수
#include <cstdlib>
#include <stdexcept>
[[noreturn]] void TerminateProgram() {
std::exit(1); // 프로그램 종료
}
int main() {
TerminateProgram();
// 이 이후 코드는 절대 실행되지 않음
return 0;
}
[[noreturn]] void ThrowError() {
throw std::runtime_error("Error occurred!");
}
void Process() {
ThrowError();
// 이 이후 코드는 절대 실행되지 않음
}
✅ 1. std::string_view의 특징
1️⃣ 문자열을 복사하지 않음 → 기존 문자열 데이터를 참조하여 빠름
2️⃣ 읽기 전용 → 문자열을 수정할 수 없음 (std::string과 다름)
3️⃣ 자동으로 C-스타일 문자열(const char*)과 std::string을 참조 가능
4️⃣ 길이를 저장하고 있음 → strlen()보다 size() 호출이 빠름
✅ 2. 기본 사용법
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "Hello, World!"; // 문자열 리터럴 참조
std::cout << sv << std::endl; // Hello, World!
std::cout << "Length: " << sv.size() << std::endl; // 13
}
✔ 문자열을 복사하지 않고 참조만 수행
✔ .size()는 O(1) 연산 (C-스타일 문자열의 strlen()은 O(n))
std::string_view는 std::string과 유사한 인터페이스를 제공하지만, 읽기 전용 함수만 사용 가능합니다.
함수 설명 예제
size() 문자열 길이 반환 sv.size()
empty() 문자열이 비어 있는지 확인 sv.empty()
substr(pos, len) 부분 문자열 반환 (std::string_view) sv.substr(7, 5)
front() 첫 번째 문자 반환 sv.front()
back() 마지막 문자 반환 sv.back()
remove_prefix(n) 앞에서 n개 문자 제거 sv.remove_prefix(7)
remove_suffix(n) 뒤에서 n개 문자 제거 sv.remove_suffix(6)
유의 -> 원본 문자열이 사라질 시 오류 발생