2012-08-30 119 views
5

我是新來的C++,並有缺乏瞭解爲什麼這個代碼工作得很好:C++:傳遞字符串字面類型爲const char *將字符串參數

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 *」。爲什麼可以將它傳遞給GetString-Function,因爲函數需要一個字符串而不是一個const char *?

+1

字符串文字的類型爲const char(&)[N]',但由於C無法將數組複製到局部變量,所以'auto'無論如何都會產生本地的'const char *'。 –

回答

8

std::string有一個converting constructor它需要一個char const*並用該指針指向的以空字符結尾的字符串初始化該字符串。這個構造函數不是explicit,所以它可以用於隱式轉換。

1

看看std :: string構造函數。 會發生什麼情況是編譯器找到了一個構造函數來接受你的const char *並用它來自動將const char *轉換爲std :: string。 順便說一句,我會建議使用const std::string& prompt來代替。

相關問題