2014-04-30 3 views
1

std :: string을 함수의 기본 인수로 전달하려고합니다. 내가 문자열의 기본 생성자는 문자열을 초기화합니다 들었std :: string, 문자열 val과 문자열의 차이 val = ""

void string_fun(int i, string val = "", int j = 10) 
// void string_fun(int i, string val, int j = 10) // <-- error since no default value 
{ 
    cout << "values " << endl; 
    cout << "i: " << i << endl; 
    cout << "val: " << val << endl; 
    cout << "j: " << j << endl; 
} 

void ret_fun() 
{ 
    string fun; 
    cout << "values " << endl; 
    cout << "fun: " << fun << endl; 
} 

int main() 
{ 
    string_fun(3); 
    ret_fun(); 
    return 0; 
} 

즉 그것의 값이됩니다 어떤 맞다면 나는

을 다음과 같은 노력하고있어? 함수에 대한 인수로 string val 만 사용한다면 여기를 참고하십시오. 컴파일 오류가 발생합니다. 하지만 모두 valfun 문자열을 출력 할 때 같은 결과가 나옵니다. 내 질문은 무엇입니까 두 문자열을 그들의 값의 경우 다른, 이후 string val = "" 또한 빈 문자열을 만듭니다.

+1

'string val = ""'대신'string val = {}'을 사용해보십시오. 전자는 기본 생성자를 사용하지만 후자는 암시 적 생성자를 사용하여'const char *'에서 문자열을 생성합니다. 전자가 더 효율적일 수 있습니다. 특히 _noexcept_으로 선언됩니다. – nosid

답변

3

함수에 대한 인수 목록을보고 있으므로 규칙이 다릅니다. std::string에는 기본 생성자가 있습니다.

요점은 언어의 인수 목록 규칙이 발신자가 통화 매개 변수를 생략하도록 허용 또는 금지하는지 확인하는 것입니다. 기본값이 주어지면 호출자는 매개 변수를 생략하고 대신 기본값을 사용합니다. 기본값이 없으면 호출자 에 적절한 매개 변수를 제공해야합니다. 두 번째 매개 변수의 기본값을두면

, 전화가 두 개 이상의 매개 변수를 필요로

string_fun(3); 

가 컴파일되지 않습니다. 호출시 기본 생성자를 사용할 수도 있습니다.

string_fun(3, string());