C++ 函数名称不明确
c++ function name ambiguity
我的类有两个具有相同名称和以下签名的函数:
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,则将调用第二个函数,否则将调用第一个版本。
相关文章:
- 为函数定义符号不明确的指针参数
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- 对重载函数find_first_not_of的不明确调用
- 调用'Node'构造函数是不明确的
- "fpclassify":对重载函数的不明确调用
- 删除全局隐式函数 - 避免使用不明确的运算符
- 不明确的函数模板
- 错误:使用复制和交换习惯用法的交换函数中"operator="的重载不明确
- 为什么这种重载函数是不明确的
- 对函数的重新定义和不明确的调用具有数组参数
- C++ 函数名称不明确
- 为什么调用具有通用或 r 值引用的重载覆盖函数是不明确的?
- C++ 函数重载不明确,没有自动类型转换
- 不明确的函数声明
- 函数模板和不明确的模板参数
- 重载调用是不明确的:一对内联映射作为构造函数参数
- 使用 -pedantic 编译时采用 std::reference_wrapper 的不明确构造函数
- C++中来自不同基类的不明确函数
- 对自身的不明确函数调用
- C++ 中的不明确函数