Questions tagged «assignment-operator»

一个对象分配给另一个对象时使用的运算符



5
什么是复制和交换习语?
这个习语是什么,什么时候应该使用?它可以解决哪些问题?使用C ++ 11时,习惯用法会改变吗? 尽管在很多地方都提到过它,但是我们没有任何奇异的“这是什么”的问题和答案,所以就在这里。这是先前提到的地方的部分列表: 您最喜欢的C ++编码样式惯用法是什么:复制交换 在C ++中复制构造函数和=运算符重载:是否可能使用通用函数? 什么是复制省略及其如何优化复制和交换习惯 C ++:动态分配对象数组?


2
准确了解data.table是何时引用另一个data.table(相对于另一个data.table的副本)
我在理解的传递引用属性时遇到了一些麻烦data.table。有些操作似乎“破坏”了参考,我想确切地了解正在发生的事情。 在创建data.table另一个表data.table(通过<-,然后通过来更新新表时:=,原始表也将被更改。这是预期的,具体如下: ?data.table::copy 和stackoverflow:通过操作员在数据表包中的引用传递 这是一个例子: library(data.table) DT <- data.table(a=c(1,2), b=c(11,12)) print(DT) # a b # [1,] 1 11 # [2,] 2 12 newDT <- DT # reference, not copy newDT[1, a := 100] # modify new DT print(DT) # DT is modified too. # a b # [1,] 100 11 …


8
Java中的快捷方式“或分配”(| =)运算符
我在Java中有很长的比较需要做,我想知道其中是否有一个或多个是正确的。比较字符串很长且难以阅读,因此为了便于阅读,我对其进行了分解,并自动使用快捷方式运算符|=而不是negativeValue = negativeValue || boolean。 boolean negativeValue = false; negativeValue |= (defaultStock < 0); negativeValue |= (defaultWholesale < 0); negativeValue |= (defaultRetail < 0); negativeValue |= (defaultDelivery < 0); negativeValue如果任何默认<something>值为负,我希望是真实的。这有效吗?会满足我的期望吗?我在Sun的网站或stackoverflow上看不到它,但是Eclipse似乎没有问题,并且代码可以编译并运行。 同样,如果我想执行多个逻辑交集,是否可以使用&=代替&&?

8
将Scala分配评估为单位而不是赋值的动机是什么?
将Scala分配评估为单位而不是赋值的动机是什么? I / O编程中的常见模式是执行以下操作: while ((bytesRead = in.read(buffer)) != -1) { ... 但这在Scala中是不可能的,因为... bytesRead = in.read(buffer) ..返回Unit,而不是bytesRead的新值。 忽略功能性语言似乎是一件有趣的事情。我想知道为什么要这么做吗?

12
Java为什么没有条件和和条件或运算符的复合赋值版本?(&& =,|| =)
因此,对于在布尔二元运算符,Java有&,|,^,&&和||。 让我们在这里简要总结一下他们的工作: JLS 15.22.2布尔逻辑运算符&,^和| JLS 15.23条件与运算符&& JLS 15.24条件或运算符|| 对于&,结果值是true两个操作数都为true; 否则,结果为false。 对于|,结果值是false两个操作数都为false; 否则,结果为true。 对于^,结果值是true操作数值是否不同;否则,结果为false。 该&&操作是一样&,但是评估其右边的操作数只有在其左侧的值操作数true。 该||操作是一样|的,但评估其右边的操作数只有在其左侧的值操作数false。 现在,所有5间,那些3有复合赋值版本,分别为|=,&=和^=。所以我的问题是显而易见的:为什么不是Java提供&&=和||=呢?我发现我需要那些比我更需要&=和|=。 而且我不认为“因为它太长”是一个很好的答案,因为Java具有>>>=。一定有一个更好的理由可以忽略这一点。 从15.26分配运算符开始: 有12个赋值运算符;[...]= *= /= %= += -= <<= >>= >>>= &= ^= |= 有人评论说,如果&&=和||=被实施,那么它将是唯一不首先评估右侧的运营商。我认为,复合赋值运算符首先评估右侧的这一观点是错误的。 从15.26.2复合赋值运算符开始: 形式的复合赋值表达式E1 op= E2等效于E1 = (T)((E1) op (E2)),其中T是的类型E1,不同之处在于该表达式E1仅被评估一次。 为了证明这一点,以下代码段抛出NullPointerException,而不是ArrayIndexOutOfBoundsException。 int[] a = null; int[] b = {}; a[0] += …

9
Java赋值运算符执行
在Java中,我知道赋值的结果是正确的操作数的值,因此类似语句的结果x == (y = x)为to true。 但是,此代码输出false。 public static void main(String[]args){ String x = "hello"; String y = "goodbye"; System.out.println(x.equals(x = y)); } 为什么是这样?以我的理解,它首先求值(x = y),它分配x的值y,然后返回的值y。然后x.equals(y)进行了评估,应该是true从那时起x,y现在应该共享相同的引用,但是我得到了false。 这是怎么回事

10
是否可以重载Python分配?
有没有一种魔术方法可以重载赋值运算符,例如__assign__(self, new_value)? 我想禁止为实例重新绑定: class Protect(): def __assign__(self, value): raise Exception("This is an ex-parrot") var = Protect() # once assigned... var = 1 # this should raise Exception() 可能吗?疯了吗 我应该吃药吗?

6
为什么拷贝分配运算符必须返回引用/常量引用?
在C ++中,从复制赋值运算符返回引用的概念对我来说还不清楚。为什么复制分配运算符不能返回新对象的副本?另外,如果我有classA和以下内容: A a1(param); A a2 = a1; A a3; a3 = a2; //<--- this is the problematic line 的operator=定义如下: A A::operator=(const A& a) { if (this == &a) { return *this; } param = a.param; return *this; }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.