我正在尝试获取 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/