我创建了两个例程,一个用于就地对 vector 进行排序:
void Sort(double** vector, unsigned int vectorLength) {
//...
}
还有一个返回一个带有排序结果的新数组:
double* Sort(double* vector, unsigned int vectorLength) {
//...
}
稍后使用排序方法:
double* test = new double[5];
//...
Sort(*test, 5);
我收到“2 个重载中没有一个可以转换所有参数类型”的编译器错误。
double* 类型不是一个指向 double 的指针,与 double** 没有根本区别,一个指向 double 的指针吗?
编译器怎么会不清楚呢?
最佳答案
你得到错误是因为 *test
表达式既不是 double*
也不是 double**
- 它是一个 double
,没有星号。
在不取消引用的情况下通过 test
是可行的:
double* sorted = Sort(test, 5); // Invokes the second overload
请注意,即使传递指针,也可以就地排序。为此使用需要人工 &
的重载,但它会使您的 API 违反直觉。
更好的方法是定义一个具有相同参数集但名称不同的方法,例如
double* Sort(double* vector, size_t vectorLength) {
//...
}
void SortInPlace(double* vector, size_t vectorLength) {
//...
}
关于c++ - 为什么编译器不能区分 double** 和 double*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22667256/