본문 바로가기
프로그래밍 언어/C++

C++ string::npos (-1) find함수의 반환값

by Jo_Wick 2025. 9. 29.
반응형

std::string::npos는 string 클래스 안에서 정의된 특별한 상수 값이다.

 

 

  • std::string::npos는 size_t 타입의 상수.
  • 값은 사실상 가장 큰 size_t 값 (즉, unsigned 정수에서의 -1).
  • npos는 "유효하지 않은 위치" 또는 "찾지 못했다"를 나타내는 용도로 쓰인다.
static const size_t npos = -1;

 

 

예시

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "Hello World";

    // 'W' 찾기
    size_t pos1 = s.find('W');   // 6
    // 'x' 찾기 (없음)
    size_t pos2 = s.find('x');   // string::npos

    if (pos2 == string::npos) {
        cout << "'x' not found\n";
    }

    cout << "pos1 = " << pos1 << "\n";
    cout << "pos2 = " << pos2 << "\n"; // 출력은 엄청 큰 수(=size_t max)
}

// 출력결과
// 'x' not found
// pos1 = 6
// pos2 = 18446744073709551615   // 64비트 환경에서 size_t max

 

정리

 

  • npos = size_t의 최대값 (보통 -1로 정의)
  • 의미: "위치 없음 (not found)"
  • 주로 find, rfind, find_first_of 같은 검색 함수들이 실패했을 때 반환

 

size_t

size_t는 부호없는 (양의) 정수 타입이다.

 

  • 32비트 시스템 → unsigned int (4바이트, 0 ~ 4,294,967,295)
  • 64비트 시스템 → unsigned long long (8바이트, 0 ~ 18,446,744,073,709,551,615)

그래서 npos = -1

  • -1은 원래 int 상수인데, size_t로 변환되면서
    부호 없는 정수의 최대값이 된다.
  • 예를 들어: 
    • 32비트 → 4294967295
    • 64비트 → 18446744073709551615

즉, npos는 size_t라는 타입을 가진 특별한 값이다.

 

 

반응형

댓글