6.28 关于const正确性的简要解释

处理C++程序的一个通用问题就是对各式各样的const限定符的处理,缺乏一定的认识的话就会破坏你的程序、所有链接到你程序的程序等。

尽管SWIG的内部类型系统知道如何正确处理const,它知道如何处理const相关或const不相关的警告,但不会尝试纠正const的问题。因此,可以在非const的方法和函数上传递const限定符。例如,考虑如下代码:

  1. const Object * foo();
  2. void bar(Object *);
  3. ...
  4. // C++ code
  5. void blah() {
  6. bar(foo()); // Error: bar discards const
  7. };

现在,考虑包装后它在python中的行为:

  1. >>> bar(foo()) # Okay
  2. >>>

尽管这种方式很显然破坏了C++的类型系统了,但修正这个问题不太值得,因为这会在SWIG运行时类型系统中增加实现复杂度。将来版本也不计划改变这种行为(虽然我们永远不会排除任何事情)。

最后要提示的是,这些特殊的问题对多数的SWIG项目来说不是个问题。当然,如果维护const相关的部分对你很重要的话,你可以考虑使用其他的工作。