将对象参数作为 const 传递并读取它

pass a object parameter as const and read it

这可能是个愚蠢的问题,但我无法解决这个问题。

我有一个名为 equations 的对象,其中定义了一个名为 X 的矩阵。

主要是,我需要调用一个名为 f 的函数,我需要在其中将矩阵作为常量传递。 我需要访问矩阵的特定位置(我不想写,只想读)。

我执行以下操作:

vec f(cx_mat const*X)
{
cout << “X[12][12] = “ << *X(12,12) << endl;
}

而且它不起作用。如果我这样做:

vec f(cx_mat const*X)
{
mat X_temp;
X_temp = *X;
cout << “X[12][12] = “ << X_temp(12,12) << endl;

}

我在工作,但我不明白为什么!!! 你能帮帮我吗?

在你的第二个例子中,你正在创建一个 mat 对象的副本,它不调用 X 的任何非常量方法。这实际上是你问题的一个解决方案,虽然不是很有效 - 我更愿意避免不必要的副本。

所以,很可能,mat class 定义了 operator=(const mat&) 函数。

除了你发现的方法还有其他的可能性:

  1. 如果您能够更改 class mat,您可以将 operator() 签名设为常量。这将解决问题。

  2. 如果不能更改mat接口,最好将f的签名更改为非常量参数引用,因为不能更改mat接口,您不能真正保证operator()不会'改变 X 的状态。

  3. 使用const_cast。我强烈建议不要使用它。我在这里提到它只是为了完整性。

改用 (*X)(12,12)。

函数调用运算符“()”的优先级高于间接运算符“*”。