2012-08-30 3 views
5

문자열 파라미터에 입력 CONST 숯불 *의 :C++ : 통과하는 문자열 리터럴이 코드는 잘 작동하는 이유는 C에 새로 온 ++과 이해의 부족이

string GetString(string promt) 
{ 
    cout << promt << ": "; 
    string temp; 
    getline(cin, temp); 
    return temp; 
} 

int main() 
{ 
    string firstName = GetString("Enter your first name"); 
    string lastName = GetString("Enter your last name"); 

    cout<< "Your Name is: " << firstName << " " << lastName; 


    cin.ignore(); 
    cin.get(); 

    return 0; 
} 

문자열 리터럴처럼 " bla "는 const char * 타입이다. 적어도 자동 i = "bla"; 그것은 "const char *"유형임을 나타냅니다. 함수가 const char *가 아닌 문자열을 기대하기 때문에 GetString-Function에 전달할 수있는 이유는 무엇입니까?

+1

문자열 리터럴은'const char (&) [N]'유형이지만 C는 배열을 지역 변수에 복사 할 수 없기 때문에'auto'는 로컬'const char * '을 만듭니다. –

답변

8

std::stringchar const*을 취하고 포인터로 가리키는 null 종료 문자열을 사용하여 문자열을 초기화합니다. 이 생성자는 explicit이 아니므로 암시 적 변환에 사용할 수 있습니다.

1

std :: string 생성자를 살펴보십시오. 컴파일러가 const char *을 받아들이고 const char *를 std :: string으로 자동으로 변환하는 데 사용되는 생성자를 찾았습니다. 동의어 대신 const std::string& prompt을 사용하는 것이 좋습니다.