根据this post:
数组订阅运算符是二元运算符,必须作为类成员实现。
然后它提供了一个例子:
class X {
value_type& operator[](index_type idx);
const value_type& operator[](index_type idx) const;
// ...
};
是否可以将此运算符定义为类定义之外的成员?
答案 0 :(得分:2)
是的,您可以将其声明为类并将其定义为另一个翻译单元(或相同的单元),如下所示
<强>的main.cpp 强>
#include <iostream>
using namespace std;
class myClass {
public:
int operator[](int idx);
};
// Definition outside of the class
int myClass::operator[](int idx) {
return 42;
}
int main() {
myClass obj;
cout << obj[55];
return 0;
}
或类似以下内容
<强>的main.cpp 强>
#include <iostream>
#include "header.h" <--
using namespace std;
int main() {
myClass obj;
cout << obj[55];
return 0;
}
<强> header.h 强>
#pragma once
class myClass {
public:
int operator[](int idx);
};
<强> header.cpp 强>
#include "header.h"
// Definition outside of the class
int myClass::operator[](int idx) {
return 42;
}
请记住ODR - One Definition Rule:在任何翻译单元中,模板,类型,对象或函数的定义不得超过一个。