c – 使用模板字符串时出现奇怪错误(InputIterator begin,InputIterator end);
作者:互联网
鉴于这样的代码段:
#include <iostream>
#include <iterator>
#include <fstream>
#include <string>
using namespace std;
int main(){
ifstream file("1.txt");
string str((istream_iterator<char>(file)),istream_iterator<char>());
file.close();
cout<<str<<endl;
}
该代码使用istream_iterator从文件构造一个字符串.
请注意,字符串构造函数的第一个参数用一对括号括起来.如果省略括号,则会出错.在VC 2008中,将出现链接错误.在G中,代码输出错误.
我对括号感到很奇怪.有什么区别,为什么?
解决方法:
没有“额外”括号,你得到C的“最令人烦恼的解析” – 而不是用两个istream_iterators定义一个名为str的对象来指定它的初始值,它被解析为一个名为str的函数的声明,它返回一个字符串,括号中的“stuff”指定它所采用的参数类型.
标签:istream-iterator,c,iterator,stl,stdstring 来源: https://codeday.me/bug/20190826/1729845.html