Chr*_*mer 9 c++ compiler-errors g++ stringstream
我正在尝试从流中读取单个字符.使用以下代码,我得到一个"模糊过载"编译器错误(GCC 4.3.2 和4.3.4).我做错了什么?
#include <iostream>
#include <sstream>
int main()
{
char c;
std::istringstream("a") >> c;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
备注:
int,double)正在工作std::istringstream iss("a"); iss >> c,编译器不会给出错误>>字符的提取运算符是非成员函数模板:
template<class charT, class traits>
basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT&);
Run Code Online (Sandbox Code Playgroud)
由于这是通过非const引用获取其第一个参数,因此您不能在那里使用临时rvalue.因此,您的代码无法选择此重载,只有各种成员函数重载,其中没有一个匹配此用法.
您的代码在C++ 11中有效,因为还有一个提取运算符将右值引用作为第一个参数.
Visual Studio 2008编译时没有错误
该编译器的许多非标准扩展之一是允许临时rvalues绑定到非const引用.
其他类型(
int,double)正在工作
基本类型的大多数提取运算符都是成员函数,可以在临时右值上调用.
如果我首先创建一个变量
std::istringstream iss("a"); iss >> c,编译器不会给出错误
iss是一个非临时左值,因此它可以绑定到非const引用.
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |