C++ 是否可以在头文件中重载运算符(在声明类时)?

C++ 是否可以在头文件中重载运算符(在声明类时)?,c++,windows,operator-overloading,C++,Windows,Operator Overloading,测试h: 这会引起什么问题吗?如果是,将其实现到cpp文件中的正确方法是什么?如果我试图将其实现到一个cpp文件中,我会得到一个错误,即参数的数量(因为函数现在不在类中?)。我想说,对于这些琐碎的函数,这是一种理想的实现方法,因为它允许编译器内联参数,从而消除函数开销 但是你应该尽可能使函数常量化 因此: 该函数根本不修改数据成员,因此我将其标记为const。此外,参数没有更改,因此我也标记了const 如果要将其实现到单独的cpp文件中,则需要使用类名对其进行限定: 测试.h class Te

测试h:


这会引起什么问题吗?如果是,将其实现到cpp文件中的正确方法是什么?如果我试图将其实现到一个cpp文件中,我会得到一个错误,即参数的数量(因为函数现在不在类中?)。

我想说,对于这些琐碎的函数,这是一种理想的实现方法,因为它允许编译器内联参数,从而消除函数开销

但是你应该尽可能使函数常量化

因此:

该函数根本不修改数据成员,因此我将其标记为
const
。此外,参数没有更改,因此我也标记了
const

如果要将其实现到单独的
cpp
文件中,则需要使用类名对其进行限定:

测试.h

class Test {
private:
    int value;

public:
    Test();
    int getValue();
    void setValue(int value);

    bool operator >(const Test &l) const { // be const correct!
        if (value > l.value) {
            return true;
        }
        return false;
    }
};
测试.cpp

class Test {
private:
    int value;

public:
    Test();
    int getValue();
    void setValue(int value);

    bool operator >(const Test &l) const; // declare only
};
此外,您还可以更简洁地使用以下功能:

// Qualify the name with Test::
bool Test::operator >(const Test &l) const { // be const correct!
    if (value > l.value) {
        return true;
    }
    return false;
}

从理论上讲,您应该使类对象尽可能小,并尽一切可能使用小的相关非成员函数。我怀疑您会被其中的差异所困扰,因为在类中定义的非静态成员函数总是有一个“不可见”的第一个/最后一个参数(this指针)。你可能忘了,但编译器不会

// Qualify the name with Test::
bool Test::operator >(const Test &l) const { // be const correct!
    if (value > l.value) {
        return true;
    }
    return false;
}
// Qualify the name with Test::
bool Test::operator >(const Test &l) const { // be const correct!
    return value > l.value;
}