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

标签 c++ arrays pointers

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

#include <iostream>
#include <iterator>

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

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

最佳答案

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

你可以简单地写

#include <iostream>
#include <iterator>

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

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

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

不过写起来也是一样

   auto first = argv, last = argv + 10;

这是 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.

关于c++ - 内置数组类型的开始和结束函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32144011/

相关文章:

c++ - 带有模型的 Qt TableView 包含指向自定义类的指针

c++ - 试图删除作为指针的模板类型的编译器错误

C++ 在另一个对象中引用一个对象的当前状态

c++ - 取消分配指针数组 - C++

c++ - 为什么赋值不包括 extern 关键字和声明变量?

javascript - 'arguments' 关键字是指最外层还是最内层函数参数?

C 中的条件语句和数组(初学者)

arrays - 数组的 n 个连续元素的最大总和

c - C 中指针递增的方法有很多种,有什么区别?

c++ - 错误 : expected unqualified-id while using boost mutex