我有这段代码将一些t
转换为整数:
template <class T>
int toInt(const T& t)
{
int i = -1;
(std::stringstream() << t) >> i;
return i;
}
这在我的Mac上工作正常,但每当我尝试在我学校的linux机器上使用它时,它都无法编译。我必须改用这样的东西:
template <class T>
int toInt(const T& t)
{
int i = -1;
std::stringstream ss;
ss << t;
ss >> i;
return i;
}
哪种方法正常。
为什么会这样?
答案 0 :(得分:5)
来自<<
的{{1}}继承的运营商std::basic_stringstream
会返回std::basic_ostream
引用作为结果。运算符std::basic_ostream &
不适用于>>
。出于这个原因,表达式
std::basic_ostream
不应该编译。
我不能立即清楚为什么它会在你的Mac上编译。
作为补充说明,在预先C ++ 11版本的语言中
(std::stringstream() << t) >> i
对于那些依赖std::stringstream() << t
的非成员实施的t
来说已经是不合理的了。 operator <<
的独立实现将非const引用作为其LHS参数。