Sha*_*esh 4 c++ language-lawyer
C ++中指向成员解引用运算符(.*和->*)的指针的优先级为4,而函数调用运算符的优先级为2。这几乎可以保证需要括号:
#include <iostream>
struct A {
int b;
int func1( int a ) { return a+b+1; }
int func2( int a ) { return 2*a+b; }
};
int main() {
A a;
a.b = 3;
int (A::*ptr)(int);
ptr = &A::func1;
std::cout<<
(a.*ptr) // <- these parenthesis
( 2 ) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
在我看来,将.*优先级2 定义为(具有从左到右的关联性)将不需要括号,而不会出现明显的不良副作用。
选择此优先级的原因是什么?
我不确定,但请记住以下代码有效:
const double x = 2.*3 + 4; // (2.0 * 3) + 4
Run Code Online (Sandbox Code Playgroud)
使.*优先级不同可能会使令牌化阶段变得不可接受地复杂。
不管是什么原因,从1980年代和CFront 2.0(文档,第22页)开始就采用这种方式。不幸的是,当时没有给出明确的理由,也没有我可以找到的任何其他历史文献。
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |