我正在使用std :: stringstream來構造一個字符串,然後嘗試傳遞完成的字符串作爲一個函數的參考,它需要一個參數std ::字符串&。從std :: stringstream傳遞std :: string參數作爲參數
我在GCC得到一個編譯錯誤:
../src/so.cpp:22:21: error: invalid initialization of non-const reference of type ‘std::string& {aka std::basic_string<char>&}’ from an rvalue of type ‘std::basic_stringstream<char>::__string_type {aka std::basic_string<char>}’
../src/so.cpp:12:6: error: in passing argument 1 of ‘void myFunc(std::string&)’
make: *** [src/so.o] Error 1
相同的代碼在Windows VS2012編譯,但無法在我的Linux和Android版本。這是什麼原因?
我可以通過暫時將ss.str()分配給一個臨時std :: string,然後通過引用傳遞該字符串來解決此問題,但這看起來有點愚蠢。乾淨地做這件事的正確方法是什麼?
#include <iostream>
#include <sstream>
void myFunc (std::string& msg)
{
std::cout << msg << std::endl;
}
int main (void)
{
std::stringstream ss;
ss << "this is a test";
myFunc (ss.str()); // Fails
std::string s = ss.str();
myFunc (s); // Pass
return 0;
}
將警告等級設置爲'/ W4',VS會告訴你在該線路上正在使用非標準的分機。 – Praetorian 2015-02-10 21:05:15