在尝试我的代码来回答另一个问题,我发现下面没有编译构建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