问题标签 [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 投票
2 回答
172 浏览

c++ - 调用构造函数的赋值运算符被破坏

我已经实现了这个问题中建议的一些更改,并且(非常感谢)它工作得很好,但是......在这个过程中,我似乎打破了声明后赋值运算符。使用以下代码:

我收到一条不错的“测试咖啡馆”消息。但是,如果我稍微修改代码以便单独完成 const char * 转换,则声明后:

名为 d 的 ustring 变为空白,所有输出都是“测试”。我的新代码有三个构造函数,一个是 void(可能是被错误使用的那个,并且在 operator+ 函数中使用),一个接受 const ustring &,一个接受 const char *。以下是我的新库代码:

0 投票
3 回答
856 浏览

c++ - std::map operator[] and automatically created new objects

I'm a little bit scared about something like this:

Since DWORD's are not automatically initialized, I'm always afraid of tmap[0] being a random number that is incremented. How does the map know hot to initialize a DWORD if the runtime does not know how to do it?

Is it guaranteed, that the result is always tmap[0] == 3?

0 投票
4 回答
26736 浏览

list - Scala 的 '::' 运算符,它是如何工作的?

在 Scala 中,我可以创建一个案例类,case class Foo(x:Int)然后将其放入一个列表中,如下所示:

现在,这里没有什么奇怪的。以下对我来说很奇怪。运算符::是列表中的一个函数,对吧?对于 Scala 中具有一个参数的任何函数,我可以使用中缀表示法来调用它。一个例子是对象上的1 + 2函数。我刚刚定义的类没有操作符,那么下面怎么可能呢?(+)IntFoo::

在 Scala 2.8 RC1 中,我从交互式提示中得到以下输出:

我可以继续使用它,但解释是什么?

0 投票
4 回答
17003 浏览

c++ - 自定义字符串类 (C++)

我正在尝试编写自己的 C++ String 类用于教育和需要目的。
首先是我对操作符了解不多,这就是我想学习它们的原因。我开始编写我的课程,但是当我运行它时,它会阻止程序但不会导致任何崩溃。
在进一步阅读之前,请查看以下代码:

首先,我不太确定我是否宣布一切正确。我试着用谷歌搜索它,但所有关于重载的教程都解释了基本的想法,这很简单,但缺乏解释每件事是如何以及何时被调用的。例如,在我的 = 运算符中,程序调用 CString(CString& str); 但我不知道为什么。
我还附上了下面的cpp文件:

为了测试,我使用了一个简单的代码,就像这个
CString a = CString("Hello") + CString(" World");
打印(一);
我尝试调试它,但有时我迷路了。首先,它为“hello”和“world”调用构造函数 2 次。然后它在 + 运算符中,这很好。然后它调用空字符串的构造函数。之后它进入“CString(CString&str)”,现在我迷路了。为什么会这样?在此之后,我注意到包含“Hello World”的字符串在析构函数中(连续几次)。我又很困惑。再次从 char* 转换为 Cstring 并来回转换后,它停止了。它永远不会进入 = 运算符,但也不会更进一步。printf(a) 永远不会到达。
我为此使用 VisualStudio 2010,但它基本上只是标准的 c++ 代码,因此我认为它不会有太大的不同

0 投票
8 回答
291 浏览

c++ - 谁在 + 运算符中删除了复制的实例?(c++)

我在整个互联网上搜索了如何正确实现 + 运算符,我发现的所有结果都执行以下步骤:

我对这个“过程”有几个问题:

  1. 以这种方式实现 + 运算符不是很愚蠢,它在第一行调用赋值运算符(复制类),然后在返回中调用复制构造函数(它也复制类,因为返回是按价值计算,所以它会破坏第一个副本并创建一个新副本.. 坦率地说,这不是很聪明......)

  2. 当我写 a=b+c 时,b+c 部分创建类的新副本,然后 'a=' 部分将副本复制给自己。谁删除了 b+c 创建的副本?

  3. 有没有更好的方法来实现 + 运算符而无需两次处理类,也没有任何内存问题?

提前致谢

0 投票
13 回答
1213 浏览

c - C问题中的条件运算符

我只是对条件运算符有一个简短的问题。这里仍然是一个初出茅庐的程序员。我得到 x = 1、y = 2 和 z = 3。

我想知道,为什么在这句话之后:

y 是 5。语句后面的值是 x = 0、y = 5 和 z = 4。我知道条件运算符的工作方式是它的格式如下:变量 = 条件?真值:假值。

对于条件 y += x-- , y 如何变为 5?我只能看到 2 (2 += 0) 和 3 (2 += 1)(然后 x-- 变为零)作为可能性。任何帮助深表感谢。:)

0 投票
2 回答
4036 浏览

c++ - C++ - 使用 GCC 编译时,'operator=' 不匹配

我最近尝试构建自己的共享和弱指针。使用 Visual Studio 编译的代码无法在 GCC (4.5.0) 中编译,并出现以下错误:

以下是我的代码中最重要的部分:

1)弱指针实现(注意 的声明operator=

2) main.cpp

问:

为什么会这样?我可能很愚蠢,但我看不出这段代码有什么问题,也无法理解 GCC 的行为。如果有人能解释为什么这段代码可以编译以及为什么它可以在 MSVS 下工作,我也将不胜感激(我的意思是,为什么一个编译器会做得很好,为什么第二个编译器会失败)。谢谢你。

更新:可以在这里看到完整的代码和编译器错误 - http://codepad.org/MirlNayf

0 投票
1 回答
53 浏览

c++ - 如何操作不同的类只有一个功能one

0 投票
5 回答
11840 浏览

c++ - 在 C++ 中实现 operator<

我有一个带有一些数字字段的类,例如:

我需要使用此类的对象作为std::map. 因此,我实施operator<. 在这里使用的最简单的实现是operator<什么?

编辑:<只要任何字段不相等,就可以假设 其含义以保证唯一性。

编辑2:

一个简单的实现:

这篇文章背后的全部原因只是我发现上面的实现太冗长了。应该有更简单的东西。

0 投票
4 回答
7530 浏览

c++ - C++ 中的用户定义转换

最近,我浏览了O'Reilly Media的 C++ Pocket Reference副本,当我看到一个关于用户定义类型的用户定义转换的简短部分和示例时,我感到很惊讶:

我已经用 C++ 编程了一段时间,这是我第一次看到这种运算符重载。这本书对这个主题的描述有点简短,给我留下了一些关于这个特性的未回答的问题:

  • 这是一个特别晦涩的功能吗?正如我所说,我已经用 C++ 编程了一段时间,这是我第一次遇到这种情况。我没有太多运气找到有关此的更深入的材料。
  • 这个比较便携吗?(我在 GCC 4.1 上编译)
  • 可以将用户定义的类型转换为用户定义的类型吗?例如

    运算符 std::string () { /* 代码 */ }