我被告知+=可以有不同于标准符号的效果i = i +.有没有在这情况下i += 1会从不同i = i + 1?
有没有办法在python中增加int对象,int似乎没有实现,__iadd__所以+ = 1实际上返回一个新对象
>>> n=1
>>> id(n)
9788024
>>> n+=1
>>> id(n)
9788012
Run Code Online (Sandbox Code Playgroud)
我想要的是保持指向同一个对象.
目的:我有从int派生的类,我想为该类实现C类型'++ n'运算符
结论:好的,因为int是不可变的,没有办法,看起来我将不得不写这样的东西
class Int(object):
def __init__(self, value):
self._decr = False
self.value = value
def __neg__(self):
if self._decr:
self.value -= 1
self._decr = not self._decr
return self
def __str__(self):
return str(self.value)
def __cmp__(self, n):
return cmp(self.value, n)
def __nonzero__(self):
return self.value
n = Int(10)
while --n:
print n
Run Code Online (Sandbox Code Playgroud) 我对C++中引用的想法不熟悉,我有一个关于引用纯数字常量的内存分配的问题.(我想先检查的另一件事是我怀疑const引用,我经常遇到它,意味着引用const,但我不确定.)
这是我在ideone.com上的测试:
#include <stdio.h>
int main() {
const int r0 = 123;
const int &r1 = 123;
const int &r2 = 123;
const int &r3 = r2;
printf("%p\n", (void *)&r0);
printf("%p\n", (void *)&r1);
printf("%p\n", (void *)&r2);
printf("%p\n", (void *)&r3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果:
0x7ffee3bd74c4
0x7ffee3bd74c8
0x7ffee3bd74cc
0x7ffee3bd74cc
Run Code Online (Sandbox Code Playgroud)
原因与此答案清楚r2相同- C++参考如何看待内存?,这说它取决于编译器.但是我在想,为什么编译器不也令,,都是一样的,因为所有具有相同的纯恒定值.(如果没有错误的搜索,则称为prvalue)r3r0r1r2123
作为一个注释:经过对该网站的一些搜索,我发现了一个最相关的问题 - 但在python中.虽然不同的语言,但我认为这个想法应该是相同/相似的:从链接,如果我的程序是用python编写的,那么123在内存空间中只有一个用于节省空间.
我读过的其他一些答案:
int &x实现为*(pointer_to_x) …