如何声明操作符/重载函数来操作const变量和非const变量
How to declare operator/ overload function to operate on a const variable and a non-const variable?
我有以下代码
#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/
。参见操作符重载:成员函数与非成员函数?查看更多信息
相关文章:
- 在内存不足之前,我可以声明多少个 const 变量?
- 当设置为 const 变量时使用 nullptr
- 声明与 const 变量和成员函数相同的标识符
- const变量是否可以在具有默认值的参数中赋值(作为可选参数)
- 编译器在传递 const 变量时返回错误:模板参数不是常量表达式
- 在成员函数之间传递const变量为数组的索引
- 为什么静态常量字符 * const 变量在为左值时可绑定到右值引用参数
- C 编译器可以执行用于返回值的命名const变量的RVO
- 如何访问一系列const变量作为const数组
- C 错误C3892:您无法分配const变量
- 是否可以在C++中推迟 const 变量的初始化,例如 Java 的"blank final"功能?
- 为什么将FMTFLAG指定两次 - 作为枚举的一部分,而另一个实例为静态const变量
- 使用非const变量代替所需的const变量(C )
- 使用const变量时,非静态数据成员的使用无效
- 定义,初始化全局const变量是安全的吗?
- const vs non-const变量一旦分配就没有变化
- 为什么设置const变量(将以相同的值存储)会导致不同的结果
- CPP中的私有静态常规成员变量与const变量
- 在避免新分配的同时,const变量的复杂初始化
- 如何通过其地址更改const变量的值