在下面的代码片段中,如果我在第二次调用std::istreambuf_iterator
时排除括号,我会在最后一行收到编译错误:
.c_str()的左边必须有一个类/ struct / union。
std::ifstream file("file.txt");;
std::string prog(
std::istreambuf_iterator<char>(file),
(std::istreambuf_iterator<char>()));
prog.c_str();
这些括号实际上做了什么?在我看来,他们应该被排除在外。
答案 0 :(得分:6)
没有括号,这将是most vexing parse的情况。它不会声明一个变量,而是一个返回std::string
的函数,称为prog
并将这两种类型作为参数。如果您之后尝试调用它,则会出现链接器错误。