Effective_STL 学习笔记(六) 警惕 C++ 最令人恼怒的解析

声明一个函数 fun 带有一个 double 而且返回一个 int:

1   int fun( double d );   
2   int fun( double (d) );  // 同上,d 的参数左右括号是多余的
3   int fun( double );     // 同上,参数名被省略

声明一个函数 gun 带有一个参数,参数指向一个没有参数、返回 double 的函数指针:

1   int gun( double (*pf)() ); // 带有一个指向函数的指针作为参数
2   int gun( double pf() );   // 同上,pf 其实是一个指针
3   int gun( double () );    // 同上,参数名可以省略

Tip: C++ 里面的一条通用规则—— 几乎任何东西都可能被分析成函数声明

1   class Widge { ... };
2   Widge w();      // 并没有声明一个叫作 w 的 Widget,声明了一个返回 Widget 对象的函数

用括号包含一个实参声明是不合法的,但用括号包围一个函数调用的观点是合法的,可以帮助我们战胜解析

原文地址:https://www.cnblogs.com/kidycharon/p/10003182.html