c++ - 为什么 C++ 中指向方法取消引用运算符的指针具有如此低的优先级?
问题描述
在 C++ 中,指向成员取消引用运算符 ( .*
and ->*
) 的指针的运算符优先级为 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";
}
在我看来,定义.*
为优先级 2 将(具有从左到右的关联性)否定括号的需要,并且没有明显的不良副作用。
选择此优先级的原因是什么?
解决方案
推荐阅读
- scala - Spark - 使用公共键合并多个地图列
- openssl - 在 AIX 上编译 OpenSSH (PKIXSSH) 时无法与 OpenSSL 加密库链接
- node.js - 使用连接表对 where 范围进行 Sequelize
- python - 使用 pandas 过滤 excel 工作表中的条件格式
- docker - 如何将额外的模块上传到数字海洋中的 odoo 容器
- php - 如何从数组中的字符串中部分删除
- r - KPSS 测试返回 NA
- html - iPhone浏览器上的高度样式img标签与其他浏览器不同吗?
- oracle - 使用 php 执行 oracle .sql 文件
- kubernetes - Calico:networkPlugin cni 设置 pod 失败,i/o 超时