【发布时间】:2012-03-25 13:21:21
【问题描述】:
在尝试我的代码回答另一个问题时,我发现以下代码无法编译
#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)));