5

在下面的代码片段中,如果我排除了第二次调用的括号std::istreambuf_iterator,我会在最后一行得到一个编译错误:

.c_str() 的左边必须有一个类/结构/联合。

std::ifstream file("file.txt");;

std::string prog(
    std::istreambuf_iterator<char>(file),
    (std::istreambuf_iterator<char>()));
prog.c_str();

这些括号实际上是做什么的?在我看来,他们应该能够被排除在外。

4

1 回答 1

6

如果没有括号,这将是最令人烦恼的 parse的情况。它不会声明一个变量,而是一个返回 a 的函数std::string,调用prog并将这两种类型作为参数。如果您稍后尝试调用它,您将收到链接器错误。

于 2012-09-11T18:31:21.720 回答