語句str2= str1 + (str1.size() - 1," ")為什麼只有1個空格添加進去了?
01-06
str1和str2都是string對象
用VS2015編譯為什麼無論str1多大,最後只有1個空格添加進去了然而用
string str3(str1.size()-1, " ");
str2 = str1 + str3;
就可以達到添加str1.size()-1個空格的目的
因為
str2= str1 + (str1.size() - 1," ");
的意思就是(不是很精確但是你意會就好)
str1.size() - 1;
str2 = str1 + " ";
str2= str1 + string(str1.size() - 1," ");
同學。。構造函數和逗號表達式根本就是兩回事啊。。。
你這個語句str2=str1+(str1.size()-1," ");後面的括弧的返回值是最後一個逗號後面的計算結果,就是" ",當然只會添加一個空格。。你試試看str2=str1+string(str1.size()-1," ");就能滿足你的要求了。。愣了半天找不到你寫錯的代碼在哪裡。。。原來錯誤的方法你寫在題目里了。。。言歸正傳,(str1.size()-1," ")其實是等於" "的,因為逗號運算符的操作順序決定的。而改正後的是構造一個string對象,運用的是string的其中一個構造函數。
所以兩者是完全不一樣的。
請用append
逗號運算符的結果是右邊的表達式的結果。你試試 : int 1 = 1, 2, 3; 看看結果
感覺大家都沒看清題主到底哪裡出了問題。其實樓主是沒搞清string str3(str1.size() - 1, " ");的本質是調用了string (size_t n, char c)這個constructor。也就是說
string str3(str1.size() -1, " ")
;相當於
string str3 = string(str1.size() - 1, " ");所以其秘密不在括弧,而在被省略的string上面。這也是為什麼如果改成str2 = str1 + string(str1.size() - 1," ");
就成立了。因為顯式得調用了這個constructor。
拓展閱讀:std::basic_string::basic_string括弧裡面是逗號表達式,返回 " "後面那個用的是構造函數C++ primer 書里有
因為括弧里是表達式啊
參考《C++Primer 5th》140頁逗號運算符
推薦閱讀:
※C++中類B需要訪問類A的私有成員變數,除了將B聲明為A的友元類外還有其它方法嗎?
※如何在#define里使用"#"?
※繼承模板類為什麼可以用this訪問基類?
※c++模板類拷貝構造函數的問題,有點疑惑?
※std::move(expr)和std::forward(expr)參數推導的疑問?