小编Zer*_*ges的帖子

范围基于用于原始类型

正如在这个问题中看到的那样,OP试图让以下语句迭代数字.

for (int n : 10)
    cout << n << endl;
Run Code Online (Sandbox Code Playgroud)

显然,语法错误,因为int没有begin()end()方法.但它应该是可能的.基于基于范围的for循环的文档,这很重要.

for ( range_declaration : range_expression ) loop_statement

range_expression - 表示合适序列的任何表达式(定义了开始和结束成员函数或自由函数的数组或对象,请参阅下文)或braced-init-list.

和以下

上述语法产生码等效于以下(__range,__begin并且__end是为了说明仅):

{ // until C++17
    auto && __range = range_expression ;
    for (auto __begin = begin_expr, __end = end_expr; __begin != __end; ++__begin) {
        range_declaration = *__begin;
        loop_statement
    }
}
Run Code Online (Sandbox Code Playgroud)

澄清begin_exprend_expr是:

begin_exprend_expr定义如下:

  • 如果range_expression …

c++ language-lawyer c++14

3
推荐指数
1
解决办法
78
查看次数

为什么C基本类型具有多个关键字的标识符

除了显而易见的答案,因为人们以这种方式设计它,为什么C/C++有类型,包括多个标识符,例如

  • long long (int)
  • short int
  • signed char

有一些基本的解析知识,并使用flex/bison工具来制作很少的解析器,我认为这会给解析类型名称带来更多的复杂性.在标准中查看C++语法,关于类型的所有内容都非常复杂.

我知道,C++(也C,我相信)不指定太多关于基本数据类型的大小,从而使类型int_8,uint_8等会无法正常工作(Altough C++ 11给我们固定宽度的整数).

那么,为什么标准的开发人员同意多字类型标识符,何时可以制作int,uint并且类似.

c c++ language-lawyer

2
推荐指数
1
解决办法
170
查看次数

为STL算法lambda调整std :: pair

假设我有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)

c++ c++11

1
推荐指数
1
解决办法
195
查看次数

写我自己的atoi功能

我试图将一串数字字符转换为相应的整数形式.请说明代码有什么问题.我想坚持使用指针.我知道指针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)

c

-1
推荐指数
1
解决办法
2432
查看次数

标签 统计

c++ ×3

c ×2

language-lawyer ×2

c++11 ×1

c++14 ×1