c++ - 虚拟数组<in, 6> arr(); 失败

标签 c++ c++17

问题是数组的声明。

我们可以评论

#include <cstdlib>
#include <fstream>
#include <iostream>
#include <vector>
#include <list> 

template <typename Type, size_t const SIZE>
class dummy_array {
    Type data[SIZE] = {};

  public:
    dummy_array(){}
    ~dummy_array(){}

    Type& operator[](size_t const index)
    {
      if (index < SIZE)
        return data[index];
      throw std::out_of_range("index out of range");
    }

    Type const& operator[](size_t const index) const
    {
      if (index < SIZE)
        return data[index];
      throw std::out_of_range("index out of range");
    }

};
int main()
{
    {
      dummy_array<int, 6> arr();
      arr[0] = 1;
      arr[1] = 2;

      for (int i = 0; i < 6; i++)
        std::cout << arr[i] << " " ;
    std::cout << std::endl;

    }
    return 0;
}

有人可以解释为什么用“dummy_array arr();”声明吗?导致故障如下。 构建日志:

main.cpp: In function 'int main()':

main.cpp:34:12: error: pointer to a function used in arithmetic [-Wpointer-arith]

   arr[0] = 1;

        ^

main.cpp:34:16: 错误:分配只读位置 '* arr'

   arr[0] = 1;

            ^

main.cpp:35:12: 错误:指向算术 [-Wpointer-arith] 中使用的函数的指针

   arr[1] = 2;

        ^

main.cpp:35:16: 错误:分配只读位置 '*(arr + 1)'

   arr[1] = 2;

            ^

main.cpp:38:27: 错误:指向算术 [-Wpointer-arith] 中使用的函数的指针

     std::cout << arr[i] << " " ;

                       ^

最佳答案

dummy_array<int, 6> arr();

这既可以看作是函数声明,也可以看作是变量声明。

编译器总是更喜欢函数声明而不是变量声明,因此您实际上声明了一个名为 arr 的函数,不带任何参数并返回一个 dummy_array。改用这个:

dummy_array<int, 6> arr{};

关于c++ - 虚拟数组<in, 6> arr(); 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56502454/

相关文章:

c++ - 在 C/C++ 中编写 YUV 图像帧的问题

c++ - 如何在不提供 C++ 值的情况下检查用户何时按下回车键

c++ - 查找 vector C++ 的唯一元素

c++ - 静态存储中的内联变量什么时候初始化?

c++ - 重载一组类的加号运算符

c++ - 基本的CUDA指针/数组内存分配和使用

c++ - 安全地覆盖 C++ 虚函数

c++ - C++中模板转换 `operator const T &`的属性是什么?

c++ - std::begin - 类型特征中不考虑用户定义的重载

c++ - C++11/14/17 中指向方法回调的指针?