C++函数定义中参数列表后面额外一对括号的含义
C++ Meaning of an extra pair of parentheses after parameter list in a function definition
在《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;
}
相关文章:
- 在命名空间中定义函数还是限定函数
- 为什么在定义函数之前先声明它
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 这个c++代码是如何在没有定义函数的情况下运行的
- 具有外部"c"和程序集的未定义函数
- 已定义函数时出现 G++ "未定义的引用"错误
- 将自定义函数传递到基抽象类中以延迟执行
- C++使用 rand 定义函数语法
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 将具有固定签名的自定义函数名称注入 CRTP
- 使用定义函数模板别名
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 在内联程序集中定义函数和从 C++ 调用时出现问题
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- 声明和定义函数静态会产生"undefined reference to function_name()"
- 朋友定义函数的名称空间是什么
- 介子 对用户定义函数的未定义引用
- 如何使用 "using" 关键字定义函数原型/签名
- 在 C 结构中定义C++函数