SWIG C++到Python: 警告(362): operator= 被忽略

12 投票
2 回答
3133 浏览
提问于 2025-04-17 06:09

我正在把一个C++类导出到Python中,发现编译的时候,SWIG发出了一个警告:

Warning(362): operator= ignored

我不太明白为什么会出现运算符重载的情况,因为在SWIG的文档中说,SWIG可以处理像赋值运算符这样的运算符。

我的类没有什么特别的,声明方式是这样的:

class Foo
{
public:
    Foo();
    Foo& operator= (const Foo&); 
    // etc ..
};

那么,SWIG为什么不能生成赋值运算符的包装代码呢?我该怎么解决这个问题呢?

2 个回答

9

请查看你文档链接的最后一行(第31.3.11节):

另外,要注意某些运算符在Python中并不能很好地对应。例如,重载的赋值运算符在Python中没有对应的意思,会被忽略。

9

在Python中,除了基本类型,实际上没有真正的赋值,只有指针的赋值。也就是说,当你把一个变量的值赋给另一个变量时,实际上是把指向那个值的“指针”复制过去了。如果你想要创建一个真正的副本,你需要使用一个特别的复制函数。

撰写回答