如何stringstream的工作,當你這樣做:C++字符串流
stringstream ss;
ss << "123" << "abc";
不會創建暴殄天物「123ABC」字符串或者它連續做兩個操作的stringstream的?
我想複製這種功能,但沒有過載我看來有兩個參數,如上面的代碼工作...
如何stringstream的工作,當你這樣做:C++字符串流
stringstream ss;
ss << "123" << "abc";
不會創建暴殄天物「123ABC」字符串或者它連續做兩個操作的stringstream的?
我想複製這種功能,但沒有過載我看來有兩個參數,如上面的代碼工作...
std::stringstream::operator<<(const char*)
返回std::stringstream&
。
這種技術可以讓你「鏈接」它。
這不完全正確 - 但它幾乎等同於您的目的的真相。
稍微更準確的陳述是std::stringstream& operator<<(std::stringstream&, const char*)
可以被鏈接。
一個更準確的說法是,ostream& operator<<(ostream&, const char*)
存在,std::stringstream
是ostream
,然後對超載電話<<
決議。
不錯,正是我在找的,謝謝! –
-1錯誤的答案。沒有成員函數需要'const char *' – Nawaz
嗯,它不會讓你連鎖<< = ...無賴。像:ss << =「123」<<「abc」; –
其實這是相同的:
std::operator<<(std::operator<<(ss, "123"), "abc");
注意有沒有成員函數,它接受const char*
作爲參數。它是一個非成員函數,並將ss
作爲第一個參數傳遞給它,並將const char*
作爲第二個參數傳遞。該函數返回std::ostream&
然後再次傳遞給它。它更像這樣:
print(print (ss, "123"), "abc"); //just for clarity
這意味着有兩個函數調用。將print
替換爲std::operator<<
。現在一切都會清楚。
希望有所幫助。
其他答案,這樣說:
(ss.operator<<("123")).operator<<("abc") //copied from other answer (wrong)
是錯誤的!這是錯誤的,因爲它假定operator<<
這需要const char*
作爲參數是一個成員函數,這是不正確的!
我不是專家,但<<是stringstream類的重載操作符,所以我想通過從左到右的內容附加每個操作一次。 –
您是否正在嘗試爲您的班級創建一個操作符<<? –
是的,但默認<<超載似乎只有一個參數,如:ss <<「123」;而不是像上面的兩個參數... –