当前位置: 首页 > 知识库问答 >
问题:

运算符重写中的不同签名

澹台承载
2023-03-14

我在看一些基本的向量库,这个类有两个运算符*的签名,但是我不能理解这两者之间的区别。

vec4 vec4::operator*(float c) const {
    return vec4(data[0] * c, data[1] * c, data[2] * c, data[3] * c);
};

vec4 operator*(float c, const vec4 &v) {
    return vec4(c * v[0], c * v[1], c * v[2], c * v[3]);
};

>

  • 两者使用时外观如何?

    为什么一个使用vec4::operator而另一个仅使用operator*

    谢谢你!

  • 共有1个答案

    谢宸
    2023-03-14

    正如您在签名末尾看到的,一个具有const属性,而另一个没有。这意味着指向这些方法所在的类的指针在其中一个方法中是常量的,因此它的成员将不能更改值。

     类似资料:
    • 问题内容: 是否可以在Python中重载运算符?如果是这样,可以定义新的运算符,例如和吗? 问题答案: 正如其他答案所提到的,您确实可以重载运算符(通过在正在编写的类中定义特殊方法,即名称以两个下划线开头和结尾的方法)。所有的细节都在这里。 要完成对您问题的回答:您不能定义新的运算符;但是它不是一个新的运算符,它是一个现有的运算符,并且通过在类中定义method来使其过载。 作为历史记录,这在C

    • 问题内容: 请告诉我Java是否可以重载运算符?如果可以在Java中的任何地方使用它,请告诉我。 问题答案: 不,Java不支持用户定义的运算符重载。Java唯一接近“自定义”运算符重载的方面是对字符串+的处理,这将导致常量的编译时串联或使用StringBuilder / StringBuffer的执行时串联。但是,您无法定义自己的操作符,它们的操作方式相同。 对于确实支持运算符重载的类Java(

    • 问题内容: 给定以下JavaScript“类”定义,这是我想到此问题的最佳方式: 以及以下测试设置代码: 有什么方法可以使用加法运算符隐式创建为对象,如下所示… 而不是求助于… 如果不是,那么在此领域中关于通过算术运算符使自定义数字JavaScript对象可组合的最佳实践建议是什么? 问题答案: 据我所知,JavaScript(至少现在已经存在)不支持运算符重载。 我能建议的最好的方法是使用一个类

    • 代码1返回1。 代码 2 返回 49。 他们不应该返回相同的结果吗? 请注意,49是1的ASCII码。 编辑:就像@matt在评论里说的那样。使用三元运算符时,“:”的两边被视为同一类型。由于getNumericValue假设它是一个int,两边都是int。条件为真,所以取左边,是chr,但认为是int。

    • 问题内容: 我有以下代码 从2.2开始,我收到了折旧警告,有什么想法可以解决此问题? 我有这个解决方案: 但这不是很好。 问题答案: 怎么样: 看来您可能正在执行类似时钟算术的操作。如果是这样,那么可以更好地理解这一点:

    • 我正在为分数制作一个模板类,分子和分母可以是int、浮点数或双精度类型。当重载算术或关系运算符时,当我尝试添加两个类时,它会出现错误,比如A类和B类 在头文件“fraction. h”中 在cpp文件中 我期望它显示10.1/12.1,但是它给出编译器错误C2678,说二进制“”:没有找到接受“fraction”类型的左操作数的运算符(或者没有可接受的转换)。我花了很多时间试图解决这个问题,现在我