为什么XS subs使用const char*?

Dav*_*ell 8 perl xs

许多Perl XS代码const char *用作XS sub的返回值,但绝不仅仅char *.例如:

const char *
version(...)
    CODE:
        RETVAL = chromaprint_get_version();
    OUTPUT: RETVAL
Run Code Online (Sandbox Code Playgroud)

来自xs-fun的代码

有人可以解释为什么const是首选吗?在我的测试中,无论是否const使用,返回的标量都是可修改的.

nwe*_*hof 8

这只是为了清晰起见.该chromaprint_get_version函数返回a const char *,因此也应该使用const char *返回类型定义XSUB .如果你看看内置类型表,它不会有所作为是否使用const char *,char *或甚至unsigned char *.他们都使用T_PVtypemap.在所有情况下,XSUB都将返回一个包含C字符串副本的SV,该字符串始终可以修改.