5

私は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* 型です。少なくとも auto i = "bla"; i が「const char*」型であることを示します。関数は const char* ではなく文字列を想定しているため、GetString 関数に渡すことができるのはなぜですか?

4

2 に答える 2

8

std::stringを取り、ポインタが指すヌル終了文字列で文字列を初期化する変換コンストラクタがあります。char const*このコンストラクターは ではないexplicitため、暗黙的な変換で使用できます。

于 2012-08-30T00:21:34.413 に答える
1

std::string コンストラクターを見てください。何が起こるかというと、コンパイラは const char* を受け入れるコンストラクターを見つけ、それを使用して const char* を std::string に自動的に変換します。ところで、const std::string& prompt代わりに使用することをお勧めします。

于 2012-08-30T00:22:43.520 に答える