其他分享
首页 > 其他分享> > c – 使用模板字符串时出现奇怪错误(InputIterator begin,InputIterator end);

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