函数调用周围的圆括号

Parenthesis around function call

本文关键字:圆括号 周围 函数调用      更新时间:2023-10-16

在下面的代码片段中,如果我排除了对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();

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

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