在嘗試我的代碼來回答另一個問題,我發現下面沒有編譯構建istringstream用繩子臨時
#include <iostream>
#include <cstring>
#include <sstream>
#include <string>
using namespace std;
// (main omitted)
const char * coin = "3D";
istringstream ss(string(s));
int i;
ss >> hex >> i; <--- error here
cout << (char) i << endl;
它失敗,出現以下錯誤:
test.cpp:15:11: error: invalid operands of types ‘std::istringstream(std::string) {aka std::basic_istringstream<char>(std::basic_string<char>)}’ and ‘std::ios_base&(std::ios_base&)’ to binary ‘operator>>’
雖然以下編譯並正常運行:
const char* coin = "3D";
string s(coin);
istringstream ss(s); // or directly istringstream ss("3D")
int i;
ss >> hex >> i;
cout << (char) i << endl;
如果我看一下定義的它構造函數爲istringstream
,它接受const std::string&
(實際上相當於basic_string<char>
),並編譯。所以我猜模板論證扣除有一個我不明白的行爲,並創建一個不那麼符合istringstream
,但爲什麼?
我使用的是GCC 4.6.1(Ubuntu風格)。
編輯:由於istringstream是一個typedef,我懷疑最後模板有什麼問題。
嘗試將其更改爲:istringstream ss((string(s))); – Ylisar 2012-03-08 00:32:16