内置数组类型的开始和结束函数

Luc*_*uca 4 c++ arrays pointers

我正在尝试为一个C风格的字符串数组(一个指向char的指针数组)获取一个开头和一个结束指针.为什么我不能调用开始和结束函数来获取它们?

#include <iostream>
#include <iterator>

int main(int argc,char *argv[])
{
  char **first=std::begin(argv),**last=std::end(argv);
}
Run Code Online (Sandbox Code Playgroud)

编译器说我的调用没有匹配功能 begin(char**&)

Vla*_*cow 6

这些函数应用于数组.至于参数,argv它实际上有类型,char **因为按值传递的数组转换为指向其第一个元素的指针,参数也调整为指针.

你可以写简单

#include <iostream>
#include <iterator>

int main(int argc,char *argv[])
{
   auto first = arg, last = argv + argc;
}
Run Code Online (Sandbox Code Playgroud)

如果函数将相应的参数声明为对数组的引用,则可以使用函数std :: begin和std :: end.例如

int MyMain( char * ( &argv )[10] )
{
   auto first = std::begin( argv ), last = std::end( argv );
}
Run Code Online (Sandbox Code Playgroud)

不过如果写的话也是一样的

   auto first = argv, last = argv + 10;
Run Code Online (Sandbox Code Playgroud)

以下是如何在C++标准中定义函数

template <class T, size_t N> T* begin(T (&array)[N]);
4 Returns: array.

template <class T, size_t N> T* end(T (&array)[N]);
5 Returns: array + N.
Run Code Online (Sandbox Code Playgroud)