C++函数定义中参数列表后面额外一对括号的含义

C++ Meaning of an extra pair of parentheses after parameter list in a function definition

本文关键字:定义 函数 参数 列表 C++      更新时间:2023-10-16

在《C++模板-完整指南(第二版(》一书的第2.3节中,作者展示了以下代码片段:

template<typename T>
class Stack {
...
void printOn() (std::ostream& strm) const {
...
}
friend std::ostream& operator<< (std::ostream& strm, Stack<T> const& s) {
s.printOn(strm);
return strm;
}
};

我对常量说明符之前的第二对括号的含义有点困惑。我以前从未见过这种语法;在网上和我的其他书上找了一段时间后,我找不到解释。

我不认为这是一个拼写错误:同样的代码在书的另一部分重复出现,而且在书的勘误表中没有提到。

这叫什么?它的目的是什么?

提前感谢


更新:正如@chris所指出的,这是一个拼写错误,它确实出现在勘误表中。不知怎么的,我没有看到。谢谢大家,对给您带来的不便深表歉意。

我假设您从一个较大的代码块中复制粘贴它(因为它看起来像一个带有额外未声明变量的模板函数(。

也就是说,它看起来仍然不像标准语法。我试着编译它,但它产生了这个错误:

error: 'printOn' declared as function returning a function

但是,函数不应具有作为返回类型的函数,如dcl.fct标准中明确规定的:

函数不应具有类型为数组或函数的返回类型

不过请注意,当重载operator()时,这种语法可能会出现,如下所示:

MyClass operator()(int a, int b, int c) {
MyClass M;
M.sum = a + b + c;
return M;
}