添加两个整数,但一个声明为"int",另一个声明为"auto"?

Adding the two integers but one declared as an "int" and other as "auto"?

本文关键字:声明 int auto 另一个 两个 整数 添加 一个      更新时间:2023-10-16

我试图找到数组中所有元素的和,并使用auto将我的初始累加器变量sum声明为0

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
    int n;
    auto sum {0};
    cin >> n;
    vector<int> arr(n);
    for(int arr_i = 0;arr_i < n;arr_i++){
        cin >> arr[arr_i];
        sum=sum+arr[arr_i];
     }
     cout<<sum;
     return 0;
}

它给了我一个编译错误。我想知道这是怎么回事。

错误:"sum+arr.std::vector<"中的"operator+"不匹配_Tp,_Alloc>::operator[]>(((std::vector::size_type)arr_i))'|

我在gcc编译器中使用代码块,是的,C++11已经启用。

在C++11中,当您使用时

auto sum {0};

sum是类型std::initializer_list<int>并且包含一个元素0。这是因为{0}是一个有支撑的初始化列表。

使用= 0;(0)应该可以正常工作于您的代码,例如:

auto sum = 0;
auto sum(0);

编辑:根据评论,这不是程序员通常所期望的,因此N3922提案在C++17中必然会发生变化,该提案已经在GCC和Clang的新版本中实现,甚至根据C++委员会的要求,-std=c++11-std=c++14也会实现。