函数调用周围的括号

时间:2012-09-11 18:30:01

标签: c++

在下面的代码片段中,如果我在第二次调用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();

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

1 个答案:

答案 0 :(得分:6)

没有括号,这将是most vexing parse的情况。它不会声明一个变量,而是一个返回std::string的函数,称为prog并将这两种类型作为参数。如果您之后尝试调用它,则会出现链接器错误。