C++ C++;函数定义中参数列表后额外一对括号的含义
在《C++模板-完整指南(第二版)》一书的第2.3节中,作者介绍了以下代码片段:C++ C++;函数定义中参数列表后额外一对括号的含义,c++,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) {
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;
}
};
模板
类堆栈{
...
void printOn()(std::ostream&strm)常量{
...
}
friend std::ostream&operator我假设您从更大的代码块复制粘贴了它(因为它看起来像一个带有额外未声明变量的模板函数)
尽管如此,它看起来仍然不像标准语法。我尝试编译它,但它会产生以下错误:
error: 'printOn' declared as function returning a function
但是,功能不应具有标准中明确规定的返回类型功能:
函数不应具有数组或函数类型的返回类型
但是请注意,当重载操作符()
时,这种语法可能会出现如下情况:
MyClass operator()(int a, int b, int c) {
MyClass M;
M.sum = a + b + c;
return M;
}
这是一个更大的片段的一部分吗?是的,但我不认为它给这个问题增加了什么重要的东西。因为它可能会,我只是复制了整个片段。这是错误的。它声明了一个不带参数的函数,返回一个函数类型void(std::ostream&)const
。那条狗不打猎。看。@WhozCraig-quibble,“不会”、“不会”--一定是区域性的问题…谢谢你的回答。正如克里斯指出的,这是一个拼写错误,我在勘误表中没有看到。