6.28 关于const正确性的简要解释
处理C++程序的一个通用问题就是对各式各样的const限定符的处理,缺乏一定的认识的话就会破坏你的程序、所有链接到你程序的程序等。
尽管SWIG的内部类型系统知道如何正确处理const,它知道如何处理const相关或const不相关的警告,但不会尝试纠正const的问题。因此,可以在非const的方法和函数上传递const限定符。例如,考虑如下代码:
const Object * foo();
void bar(Object *);
...
// C++ code
void blah() {
bar(foo()); // Error: bar discards const
};
现在,考虑包装后它在python中的行为:
>>> bar(foo()) # Okay
>>>
尽管这种方式很显然破坏了C++的类型系统了,但修正这个问题不太值得,因为这会在SWIG运行时类型系统中增加实现复杂度。将来版本也不计划改变这种行为(虽然我们永远不会排除任何事情)。
最后要提示的是,这些特殊的问题对多数的SWIG项目来说不是个问题。当然,如果维护const相关的部分对你很重要的话,你可以考虑使用其他的工作。