数组的 C++ 语法指针

标签 c++ templates pointers constants

在以下内容中:

int c[10] = {1,2,3,4,5,6,7,8,9,0};

printArray(c, 10);

template< typename T >
void printArray(const T * const array, int count)
{
    for(int i=0; i< count; i++)
        cout << array[i] << " ";
}

我有点困惑,为什么模板函数的函数签名没有通过使用 [] 来引用数组作为数组,所以类似于 const T * const[] array

如何从模板函数签名中判断正在传递的是一个数组而不仅仅是一个非数组变量?

最佳答案

您无法确定。您将不得不阅读文档和/或从函数参数的名称中找出答案。但是由于您正在处理固定大小的数组,您可以这样编码:

#include  <cstddef> // for std::size_t

template< typename T, std::size_t N >
void printArray(const T (&array)[N])
{
    for(std::size_t i=0; i< N; i++)
        cout << array[i] << " ";
}

int main()
{
  int c[] = {1,2,3,4,5,6,7,8,9,0}; // size is inferred from initializer list
  printArray(c);
}

关于数组的 C++ 语法指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13810259/

相关文章:

c++ 从宏到模板

循环链表在尝试打印时崩溃

c - 在链表开头插入节点

c++ - 在 C++/Qt 中获取平台特定的行尾字符

c++ - 警告——与指针结合的算术表达式中的可疑截断

C++:如何对 scoped_ptr 进行单元测试?

c - 列表不断打印

c++ - Gradle:同一项目中的 Java/Kotlin、C++、ProtoBuf

c++ - 没有模板特化的模板阶乘函数

c++ - 如何处理太长的 STL 模板错误报告?