gpt4 book ai didi

c++ - 如何声明运算符/重载函数以对 const 变量和非常量变量进行操作?

转载 作者:太空狗 更新时间:2023-10-29 21:14:50 26 4
gpt4 key购买 nike

我有以下代码

#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')

在类 vector 中,我声明了 operator/

Vector operator/(const float a);

我在考虑重新定义方法来

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

这是一个很好的方法还是有什么方法可以让运算符的当前定义考虑到 const Vector 的情况?

最佳答案

如果它不会(也不应该)修改任何非静态成员变量,您可以使它成为一个 const 成员函数,它可以应用于 const 和非常量对象。

Vector operator/(const float a) const;

如您所想,使其成为非成员函数(并在必要时声明为友元函数)也可以完成这项工作。 IMO 我更喜欢 operator/。参见 Operator overloading : member function vs. non-member function?了解更多信息。

关于c++ - 如何声明运算符/重载函数以对 const 变量和非常量变量进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39629425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com