c++ - LLVM 源代码中计算数组长度的函数

标签 c++ arrays templates function-templates

<分区>

llvm-3.4\include\llvm\ADT\STLExtras.h 中,我看到了这个函数:

/// Find the length of an array.
template<class T, std::size_t N>
inline size_t array_lengthof(T (&)[N]) {
  return N;
}

此函数返回数组长度:

int main(){
  const char spaces[] = "dededesdf sdf sdfs fdsf"
                        "dadsds jsdfdfs ffjsdklfj dsfds";
  std::cout << array_lengthof(spaces); //prints 54
  return 0;
}

谁能解释一下函数的工作原理以及参数 T (&)[N] 的含义? 有没有什么场景不能使用这个功能?

最佳答案

这是一个非类型模板参数。它通过利用模板参数推导机制来工作。基本上,它会尝试找出将导致匹配的模板参数。

只要它是一个真正的数组,它就可以工作。它不适用于指向一 block 内存的指针,例如:

int *array = new int[10];
array_lengthof(array); // ERROR.

关于c++ - LLVM 源代码中计算数组长度的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23379536/

相关文章:

java - 为什么在检查数组字符串是否为空时会出现空指针异常?

c++ - 扩展 Eigen Ref 类

c++ - 从 Class<U> 调用 Class<T> 的私有(private)构造函数

c++ - 使用 QtSql 真的需要 QApplication 吗?

c++ - 没有运行时错误不能从网页类继承

python - 使用自定义视频编写器库编写音频的错误

c - 如何在C中将整数放入 vector 中?

javascript - 如何扩展 Array.prototype.push()?

c++ - 可变参数模板模板参数

c++ - 如何覆盖模板化子类中的非模板化方法