首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串流的二义性重载

字符串流的二义性重载
EN

Stack Overflow用户
提问于 2012-04-01 02:40:24
回答 1查看 1.3K关注 0票数 3

我的代码看起来像这样:

代码语言:javascript
复制
template <typename type> void deserialize_element(type* result) {
    //...
    if /*...*/
    else stringstream(line) >> *result;
}

MSVC编译没有问题,但GCC给出:

代码语言:javascript
复制
    error: ambiguous overload for 'operator>>' in 'std::basic_stringstream<char>(((const std::basic_stringstream<char>::__string_type&)((const std::basic_stringstream<char>::__string_type*)(& line))), std::operator|((std::_Ios_Openmode)16u, (std::_Ios_Openmode)8u)) >> * result'
    /usr/include/c++/4.5/istream:120:7: note: candidates are: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>] <near match>
    /usr/include/c++/4.5/istream:124:7: note:                 std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>, std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<char>] <near match>

现在,我在Stack Overflow和其他地方看到了一些类似的问题。这些似乎是在处理人们对stringstream或其他不可靠的行为进行子类化。就我而言,这应该和将">>“应用于普通字符串流和字符一样简单?为什么这不起作用?

谢谢,

伊恩

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-01 02:45:29

我认为这个问题是MSVC++如何处理rvalue的一个众所周知的错误。在队伍中

代码语言:javascript
复制
stringstream(line) >> *result;

您正在创建一个临时stringstream对象,然后对其调用operator >>。如果operator >>是一个自由函数,则其签名可能通过引用获取流参数。但是,像您在这里构造的临时对象不能通过引用传递。Visual Studio允许您这样做,尽管C++规范不允许这样做,这就是为什么这在g++中有效,但Visual Studio不允许这样做。

要解决此问题,请将其拆分为两行:

代码语言:javascript
复制
stringstream stream(line);
stream >> *result;

希望这能有所帮助!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9958621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档