C++如何通过对象指针访问Matrix类重载的operator()运算符获取元素
正确访问方式
你可以使用以下两种合法写法访问元素:
- 优先对指针解引用后调用运算符(最常用、可读性最高):
(*m)(i, j) = 3.14; // 赋值 double val = (*m)(i, j); // 取值 - 显式调用重载的运算符成员函数:
该写法语法完全合法,如果你使用时触发报错,通常是参数范围错误、变量名拼写错误导致的,和语法本身无关。m->operator()(i, j) = 3.14; // 赋值 double val = m->operator()(i, j); // 取值
错误写法原因说明
你尝试的*m(i,j)是运算符优先级导致的错误:C++中函数调用()的优先级高于指针解引用*,所以这个表达式会被编译器解析为*(m(i,j)),会先尝试对指针m调用()运算符,而指针本身没有重载该运算符,直接触发编译错误。
便捷优化
如果需要频繁操作该堆上的Matrix对象,可以先创建引用绑定到解引用后的实例,后续就可以完全沿用栈对象的操作写法:
Matrix& mat = *m; mat(0, 0) = 1.5; double val = mat(1, 1);
内容的提问来源于stack exchange,提问作者Ashok
相关产品推荐
相关产品推荐

