template<typename T>
void func(T* arr, size_t length)
{
size_t size_half = length / 2;
T* left = arr, right = arr + size_half; // Cannot initialize a variable of type 'int' with an rvalue of type 'int *'
}
在我看来,编译器认为正确的类型是int而不是int *,为什么?
答案 0 :(得分:4)
因为*附在右边而不是左边。
更像是:
T *left, right
这就是语言语法的定义方式。 您可以通过以下方式修复它:
T *left=...,*right=....;
答案 1 :(得分:2)
在类型中,*
适用于以下内容,因此您应该编码:
template<typename T> void func(T* arr, size_t length) {
size_t size_half = length / 2;
T *left = arr,
*right = arr + size_half;
//etc...
}
实际上,我认为你应该每行声明一个指针:
T *left= arr;
T *right= arr + size_half;
甚至(C ++ 11风格):
T *left {arr};
T *right {arr + size_half};
或
auto left {arr};
auto right {arr + size_half};
声明其行上的每个指针是恕我直言,更具可读性。
顺便说一句,您可以考虑使用std::array<T>
或std::vector<T>
答案 2 :(得分:0)
就像这样
T *left = arr, *right = arr + size_half;