<p>根据python dev的一些邮件列表对话,看起来最初的API只是没有考虑到const的正确性,可能只是因为Guido没有考虑到这一点。追溯到2002年,<a href="http://code.activestate.com/lists/python-dev/20908/" rel="nofollow">someone asked</a>如果有人想通过添加常量正确性来解决这个问题,抱怨总是这样做很痛苦:</p>
<pre class="lang-c prettyprint-override"><code>somefunc(const char* modulename, const char* key)
{
... PyImport_ImportModule(const_cast<char*>(modulename)) ...
</code></pre>
<p>Guido Van Rossum(Python的创建者)<a href="http://code.activestate.com/lists/python-dev/20914/" rel="nofollow">replied</a>(emphasis mine):</p>
<blockquote>
<p><strong>I've never tried to enforce const-correctness before</strong>, but I've heard
enough horror stories about this. The problem is that it breaks 3rd
party extensions left and right, and fixing those isn't always easy.
In general, whenever you add a const somewhere, it ends up propagating
to some other API, which then also requires a const, which propagates
to yet another API needing a const, ad infinitum.</p>
</blockquote>
<p>有更多的讨论,但没有Guido的支持,这个想法就夭折了。在</p>
<p>9年后,这个话题又出现了。这一次有人只是想知道,为什么有些函数是const正确的,而其他的却不是</p>
<blockquote>
<p>We have been adding const to many places over the years. I think the
specific case was just missed (i.e. nobody cared about adding const
there).</p>
</blockquote>
<p>似乎在不破坏向后兼容性的情况下,const-correction已经被添加到C-API中的许多地方(在python3的例子中,它会在某些地方打破与python2的向后兼容性),但从来没有真正的全球性努力来修复它。因此,Python3中的情况更好,但是整个API现在可能还不正确。在</p>
<P>我不认为Python社区有任何处理调用的方法,而不是^ {< CD1>} -正确(在官方^ {A4}中没有提到它),可能是因为没有一个用户与C++代码接口连接C-API。我认为从纯C++最佳实践的角度来看,首选的方法是首选。(我决不是一个C++专家,所以,请接受这一点。)在</p>