正如在这个问题中看到的那样,OP试图让以下语句迭代数字.
for (int n : 10)
cout << n << endl;
Run Code Online (Sandbox Code Playgroud)
显然,语法错误,因为int没有begin()和end()方法.但它应该是可能的.基于基于范围的for循环的文档,这很重要.
for(range_declaration:range_expression)loop_statementrange_expression - 表示合适序列的任何表达式(定义了开始和结束成员函数或自由函数的数组或对象,请参阅下文)或braced-init-list.
和以下
上述语法产生码等效于以下(
__range,__begin并且__end是为了说明仅):Run Code Online (Sandbox Code Playgroud){ // until C++17 auto && __range = range_expression ; for (auto __begin = begin_expr, __end = end_expr; __begin != __end; ++__begin) { range_declaration = *__begin; loop_statement } }
澄清begin_expr和end_expr是:
begin_expr和end_expr定义如下:
- 如果range_expression …
除了显而易见的答案,因为人们以这种方式设计它,为什么C/C++有类型,包括多个标识符,例如
long long (int)short intsigned char有一些基本的解析知识,并使用flex/bison工具来制作很少的解析器,我认为这会给解析类型名称带来更多的复杂性.在标准中查看C++语法,关于类型的所有内容都非常复杂.
我知道,C++(也C,我相信)不指定太多关于基本数据类型的大小,从而使类型int_8,uint_8等会无法正常工作(Altough C++ 11给我们固定宽度的整数).
那么,为什么标准的开发人员同意多字类型标识符,何时可以制作int,uint并且类似.
假设我有std :: pair的STL容器.有没有办法使用boost来调整对的第二个STL算法lambda?
std::vector<std::pair<int, SomeStruct>> vec;
const auto Predicate = [](SomeStruct const& s) { ... };
auto it = std::find_if(vec.begin(), vec.end(), boost-magic(Predicate));
Run Code Online (Sandbox Code Playgroud) 我试图将一串数字字符转换为相应的整数形式.请说明代码有什么问题.我想坚持使用指针.我知道指针str指向我的字符串中的第一个字符.所以,每次我在循环中调用我的函数时,我希望指针增加1,并将字符的值添加到我的数组中的一个节点.出于某种原因,虽然我无法这样做.这是代码.
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
int ctoi(char *c);
int main (void)
{
char *str;
int A[20];
int i = 0;
str = (char*) malloc(20 * sizeof(char));
printf("Input the string. ");
scanf("%s", str);
while(str != '\0')
{
A[i] = ctoi(str);
i++;
str++;
}
for(i = 0; i < strlen(str); i++)
printf("%d", A[i]);
getchar();
getchar();
return 0;
}
int ctoi(char *c)
{
int a;
a= *c - '0';
return a;
}
Run Code Online (Sandbox Code Playgroud)