问题标签 [operator-keyword]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
1731 浏览

c++ - C++ 中重载算术运算符的最佳签名是什么?

我假设 operator+ 的规范形式,假设存在重载的 operator+= 成员函数,是这样的:

但有人向我指出,这也行得通:

本质上,这种形式将临时的创建从实现主体转移到函数调用。

两个参数有不同的类型似乎有点别扭,但是第二种形式有什么问题吗?有理由偏爱其中一个吗?

0 投票
3 回答
2199 浏览

c++ - C++ 运算符歧义

原谅我,因为我对 C++ 还很陌生,但是我在操作符歧义方面遇到了一些麻烦。对于在我的桌面上编译的代码,我认为它是特定于编译器的。但是,它无法在我的笔记本电脑上编译。我想我知道出了什么问题,但我没有看到一个优雅的解决方法。如果我犯了明显的错误,请告诉我。无论如何,这就是我想要做的:

我制作了自己的矢量类 Vector4,它看起来像这样:

然后我有这些导致问题的运算符:

我有转换运算符,以便我可以将 Vector4 类的实例传递给 glVertex3fv,并且出于明显的原因我有下标。但是,涉及下标 Vector4 的调用对编译器来说变得模棱两可:

以下是候选人:

为什么在 Vector4 上已经定义了下标运算符时,它会首先尝试将我的 Vector4 转换为 GLfloat*?有没有一种不涉及类型转换的简单方法?我只是犯了一个愚蠢的错误吗?感谢您提前提供任何帮助。

0 投票
8 回答
3230 浏览

c++ - C++ 编译器找不到函数(命名空间相关)

我在 Visual Studio 2008 中从事 C++ 编程任务。我们提供了定义以下命名空间层次结构的文件(名称只是为了这篇文章,我知道“命名空间 XYZ-NAMESPACE”是多余的):

MAIN-NAMESPACE 内容在一堆文件之间拆分,出于某种我不理解的原因,Set 和 LinkedList 的 operator<< 完全在 MAIN-NAMESPACE 之外(但在 Set 和 LinkedList 的头文件中)。这是套装版本:

现在问题来了:我有以下数据结构:

它被定义在 MAIN-NAMESPACE 中的一个类中。当我创建该类的一个实例并尝试打印其中一组时,它告诉我:错误 C2679:二进制“<<”:未找到采用“const MAIN-NAMESPACE”类型的右侧操作数的运算符: :POINTER-COLLECTIONS-NAMESPACE::Set' (或没有可接受的转换)

但是,如果我只是编写一个 main() 函数,并创建 Set A,填充它并使用运算符 - 它可以工作。

知道有什么问题吗?(注意:我尝试了 using 和 include 我能想到的任何组合)。

0 投票
2 回答
1442 浏览

c++ - 编译器未创建模板化 ostream << 运算符

我有一个类,在头部定义为:

在一个实现文件中,我有:

这一切看起来都很犹太。但是,当我尝试使用此运算符(即 std::cout << MyClass())时,我收到以下链接器错误:

我很惊讶编译器没有自动为我生成这个......关于我做错了什么的任何建议?

0 投票
7 回答
6075 浏览

java - Java 中的按位与,按位包含或问题

我在一个项目中有几行代码,我看不到......

它从文件中读取文件缓冲区,存储为字节,然后如图所示传输到缓冲区 [i],但我不明白总体目的是什么,有什么想法吗?

谢谢

0 投票
5 回答
2414 浏览

c++ - 无法通过 C++ 中的隐式转换找到运算符

在编写一个类以充当堆分配对象的包装器时,我遇到了隐式类型转换的问题,可以简化为这个简单的示例。

在下面的代码中,包装类管理一个堆分配的对象并隐式转换为对该对象的引用。这允许包装器对象作为参数传递给函数 write(...),因为发生了隐式转换。

但是,当尝试解析对 operator<<(...) 的调用时,编译器会失败,除非进行了显式转换(使用 MSVC8.0、Intel 9.1 和 gcc 4.2.1 编译器进行检查)。

那么,(1)为什么在这种情况下隐式转换会失败?(2)它可能与依赖于参数的查找有关吗?(3) 如果没有明确的演员表,有什么可以做的吗?

0 投票
5 回答
13394 浏览

c++ - C++ const std::map 引用无法编译

传递对 a std::mapas const 的引用会导致 [] 运算符中断是否有原因?使用 const 时出现此编译器错误(gcc 4.2):

错误:“map[name]”中的“operator[]”不匹配</p>

这是函数原型:

const而且,我应该提一下,当我删除. 前面的关键字时没有问题std::map

如果我的指示正确,如果 [] 运算符找不到密钥,它实际上会在映射中插入一个新对,这当然可以解释为什么会发生这种情况,但我无法想象这会是可接受的行为。

如果有更好的方法,比如使用find而不是 [],我将不胜感激。我似乎也无法找到工作……我收到const mismatched iterator 错误。

0 投票
4 回答
9875 浏览

c++ - 如何制作“运算符”变量?(C++)

我正在制作一个表达式类:

正如你所看到的,这有点伪代码,因为我需要一个操作符类。我最初的想法是创建一个包含所有可能的运算符的数组,然后通过字符串对其进行转换,但是由于运算符数量众多,以及如何将其转换为字符串,除了通过二维数组之外,这不起作用,其中 n[0][0] 具有第一个运算符,而 n[0][1] 具有该运算符字符串。

有人对向我的表达式类添加运算符值有任何建议吗?

0 投票
3 回答
10957 浏览

c++ - 引用类型转换运算符:自找麻烦?

当我使用编译以下代码时g++

我收到以下错误消息:

经过一番思考,这些错误对我来说很有意义。A()只是一个临时值,而不是堆栈上的可分配位置,因此它似乎没有地址。如果它没有地址,那么我就无法引用它。好的。

可是等等!如果我将以下转换运算符添加到类A

那么一切都很好!我的问题是这是否远程安全。什么this时候A()被构造为临时值?

我对以下事实充满信心

可以根据g++我使用的所有其他编译器接受临时值。const关键字总是可以被抛弃,所以如果const A&参数和参数之间存在任何实际的语义差异,我会感到惊讶A&。所以我想这是问我问题的另一种方式:为什么const对编译器认为安全的临时值的引用而不是非const引用?

0 投票
4 回答
605 浏览

c++ - 在 C++ 中重载 +=

如果我重载了 operator+ 和 operator= 我还需要重载 operator+= 才能使这样的事情起作用: