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

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

我试图找到数组中所有元素的总和,并使用 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;
}

它给我一个编译错误。我想知道这有什么问题。

error: no match for 'operator+' in 'sum + arr.std::vector<_Tp, _Alloc>::operator[] >(((std::vector::size_type)arr_i))'|

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

在 C++11 中,当您使用

auto sum {0};

thensumstd::initializer_list<int> 类型,包含一个元素 0。这是因为 {0} 是一个花括号初始化列表。

使用 = 0;(0) 应该适用于您的代码,例如:

auto sum = 0;
auto sum(0);

编辑: 根据评论,这不是程序员 usually expected, hence it is bound to change in C++17 with the N3922 proposal, which is already implemented in newer versions of GCC and Clang, with even for -std=c++11 and -std=c++14 per the request of the C++ committee