考虑:

#include <iostream>

template <typename T> T getArray( T &arr ) {
    return *arr;
}

int main() {

    int a[] = {5, 3, 6};

    std::cout << getArray(a);

}

假设要打印数组中的第一个元素,但是它不起作用。这是为什么?

它给了我错误:
error: no matching function for call to 'getArray(int [3])'

最佳答案

a的类型为int[3],因此T的类型为int[3]无法从函数返回数组。

在C++ 11中,您可以执行以下操作:

template <typename T>
auto getArray(T &arr) -> decltype(*arr)
{
    return *arr;
}

或这个:
// requires <type_traits>

template <typename T>
typename std::remove_extent<T>::type& getArray(T &arr)
{
    return *arr;
}

在C++ 03中,您可以执行此操作,但这并不完全相同:
template <typename T>
T getArray(T* arr /* not really an array */)
{
    return *arr;
}

或者:
template <typename T, std::size_t N>
T getArray(T (&arr)[N])
{
    return *arr;
}

关于c++ - 为什么我不能在模板中返回数组的第一个元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11942997/

10-10 00:56