在“ 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所指出的,这是一个错字,并且确实在勘误中有所体现。不知何故,我没有看到它。谢谢大家,不便之处,敬请谅解。
答案 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;
}