当心C++编译器中最烦人的分析机制
C++是较为底层的面相对象语言,在底层的语法规则分析中,有很多隐藏的分析机制。
C++中的普遍规律相符,即尽可能地解释为函数声明。
把形式参数的声明用括号括起来是非法的,但给函数参数加上括号却是合法的,所以通过增加一对括号,我们强迫编译器按我们的方式来工作。
例如:
![](file:///storage/emulated/0/Pictures/Screenshots/IMG_20181223_210753.jpg)
这样是不正确的,因为形参含有括号
争取做法:
![](file:///storage/emulated/0/Pictures/Screenshots/IMG_20181223_210929.jpg)
用一个括号包括整个形参是可以的。
但是种做法并不是所有的编译器都能识别的,所以存在可移植性问题,在跨平台是可能会出现问题。
解决方法:
![](file:///storage/emulated/0/Pictures/Screenshots/IMG_20181223_211533.jpg)
使用临时命名迭代器来分步完成需求。
虽然这样做与标准STL使用有点违背了,但是为了没有二义性和提高代码可读性和方便维护是比较提倡的。