C++ 函数名称不明确

c++ function name ambiguity

本文关键字:不明确 函数 C++      更新时间:2023-10-16

我的类有两个具有相同名称和以下签名的函数:

Mat<T, rows, cols> & transpose()
{   
for (size_t i = 0; i < rows; ++i) {
for (size_t j = i + 1; j < cols; ++j) {
std::swap(at(i, j), at(j, i));
}
}
return *this;
}

此方法执行矩阵的就地转置。现在,我有另一个函数,它保持原始矩阵不变并在新矩阵中进行转置。签名为:

Mat<T, cols, rows> transpose() const

请注意,列和行是交换的。

现在,我称之为:

Mat<int, 3, 4> d;
// Fill this matrix
Mat<int, 4, 3> e = d.transpose();

这仍然尝试调用第一个方法。如果我将第二个方法重命名为transpose2并调用它,那就没问题了。有没有办法使这两个功能变得模糊?

重载解析不依赖于返回值,它由参数与参数最匹配的函数决定。你必须使被调用的对象被const,才能使const成员函数重载被调用。例如

Mat<int, 4, 3> e = const_cast<const Mat<int, 3, 4>&>(d).transpose();

不能按返回类型重载函数。在下面的线程中讨论

重载方法是否可以有不同的返回类型?

在您的情况下,您是在"const"的基础上覆盖的。因此,如果您将 d 声明为 const,则将调用第二个函数,否则将调用第一个版本。