std :: string,为什么范围构造函数的这种行为?

时间:2016-11-12 17:36:34

标签: c++

我有一段代码可以将文本文件内容加载到char *中。 (我知道这是C ++和C的奇怪组合,但请耐心等待。)

std::ifstream filestream1(filename);

std::string str1(std::istreambuf_iterator<char>(filestream1), 
                 (std::istreambuf_iterator<char>()) ); 

GLchar * code1 = (GLchar *) malloc(sizeof(GLchar) * str1.length());
strcpy(code1, str1.c_str());  

之前我在这个版本的行之后得到了str1变量上的“表达musy have class type”错误:

std::string str1(std::istreambuf_iterator<char>(filestream1), 
                 std::istreambuf_iterator<char>() ); 
//str1 causes "expression must have class type" errors 

显然,添加额外的括号(对我来说似乎是多余的,说实话),解决了问题。问题是,一个和另一个究竟发生了什么变化?这不是那些“声明一个函数而不是实例化一个类”的错误之一,是吗?我的意思是,甚至可以在函数调用中声明一个没有名称的函数,并且没有[]像lambda一样?

0 个答案:

没有答案