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

时间:2018-07-14 03:47:35

标签: c++

在“ 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;
  }
};

对于 const 修饰符之前的第二对括号的含义,我有些困惑。我以前从未见过这种语法。在网上和其他书籍上找了一会儿之后,我找不到解释。

我不认为这是错别字:在本书的另一部分重复了相同的代码,并且在本书的勘误中也没有提及。

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

预先感谢


更新:正如@chris所指出的,这是一个错字,并且确实在勘误中有所体现。不知何故,我没有看到它。谢谢大家,不便之处,敬请谅解。

1 个答案:

答案 0 :(得分:4)

我假设您从更大的代码块中复制并粘贴了该代码(由于它看起来像是带有额外未声明变量的模板函数)。

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

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;
}