如何声明操作符/重载函数来操作const变量和非const变量

How to declare operator/ overload function to operate on a const variable and a non-const variable?

本文关键字:const 变量 函数 操作 重载 何声明 声明 操作符      更新时间:2023-10-16

我有以下代码

#pragma once
#include "material.h"
#include "../Math/vector.h"
#include <cmath>
class LambertianMaterial : public Material
{
public:
    LambertianMaterial(Vector rho);
    Vector brdf(Vector wi) const
    {
        return mRho / M_PI; // Error here
    }
private:
    Vector mRho;
};

在brdf返回语句对应的行中,我得到以下错误

Invalid operands to binary expression ('const Vector' and 'double')

在类向量中,我像

那样声明了operator/
Vector operator/(const float a);

我正在考虑重新定义方法

friend Vector operator/(const Vector& v, const float& a);

这是一种好方法吗?还是有一种方法可以使操作符的当前定义考虑const Vector的情况?

您可以将其设置为const成员函数,如果它不会(也不应该)修改任何非静态成员变量,则可以将其应用于const和非const对象。

Vector operator/(const float a) const;
正如您所想的那样,使其成为非成员函数(并在必要时声明为友元)也可以完成工作。在我看来,我更喜欢operator/。参见操作符重载:成员函数与非成员函数?查看更多信息