2014-02-28 30 views
0

我有關於C++字符串的兩個問題:C++傳遞字符串引用到功能

  1. 表達string func(string & s)作品以類似的方式來string & func(string & s),但你如何確定返回值是參考或非參考?
  2. 爲什麼我不能用func((string)str)呢?


的代碼如下,包括評論顯示我的與問題1和問題2意圖:

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

//Q1:string func(string & s){ 
string & func(string & s){ 
    s[2]='S'; 
    return s; 
} 

int main(){ 
    char str[]={'H','H','H','H'}; 
    string name="HHHHH"; 
    //Q2:string tmp=(string)str; 
    //string rest=func(tmp); 
    string rest=func((string)str); 
    cout<<"rest"<<rest; 
} 
+0

至於Q1:如果你知道C++引用它應該是顯而易見的。至於Q2:你不能從一個字符數組構造一個std :: string,除非這個字符數組是以null結尾的。 – heinrichj

+0

'char str [] = {'H','H','H','H'}'是一個由四個字符組成的數組,而不是C字符串。 C-字符串端接一個NUL字節,相當於'炭STR [] = { 'H', 'H', 'H',H」,0/*或 '\ 0' * /};'或'炭STR [1] =「HHHH」;' – kfsone

回答

3

Q1:返回string&返回到原來的字符串的引用。返回string返回原始字符串的副本。此外,返回string&使函數調用表達式成爲左值,而返回string使其成爲右值。

Q2:(string)str創建了一個從str初始化的臨時std::string。因此它是一個右值。但func預計其一個參數是一個左值,因爲參數是非const左值參考。

+0

我得到了這一點:因爲非const,而不是TMP-obj的它,讓我錯了 – aishuishou