c++ - 未使用重载运算符 []

标签 c++

<分区>

给出一个最小的例子:

#ifndef ARR_H_
#define ARR_H_

#include <iostream>

class Array {
    public:
        Array();
        int operator[](int idx);
    private:
        int arr[10];
};

int Array::operator[](int idx) {
    std::cout << "ok";
    return arr[idx];
}

#endif

然后我尝试创建一个对象

#include "test.h"
#include <iostream>

int main() {
    std::cout << "Create" << std::endl;
    Array obj();
    int i = obj[0];

    return 0;
}

为什么会报错

main.cpp: In function ‘int main()’:
main.cpp:7:18: warning: pointer to a function used in arithmetic [-Wpointer-arith]
     int i = obj[0];
                  ^
main.cpp:7:18: error: invalid conversion from ‘Array (*)()’ to ‘int’ [-fpermissive]

为什么它不使用我的operator[]

最佳答案

这个

Array obj();

是一个没有参数且返回类型为 Array 的函数声明。

随便写

Array obj;

请注意,如果您想使用运算符为数组元素赋值,那么返回对元素的引用会更好

int & operator[](int idx);

你也可以为常量对象声明这个运算符

const int & operator[](int idx) const;

int operator[](int idx) const;

关于c++ - 未使用重载运算符 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33375402/

相关文章:

c++ - 访问 bool 变量是否比访问 int 标志更快?

c++ - 如何检查使用的udp缓冲区状态?

带删除的 C++ 映射迭代

c++ - 如何实现多线程访问的类锁对象

c++ - 使用 C++ 在 Twincat 3 上进行 PLC 编程

c++ - 在进程外调用时 MiniDumpWriteDump 中的访问冲突

c++ - glVertexAttribPointer 覆盖

c++ - 在特殊情况函数中展开 for 循环

c++ - 字符指针的二维数组需要以两个null结尾吗?

c++ - 如何正确取消初始化 OpenSSL