[英]Python sentinel in C++ extension
我正在研究用C ++編寫的Python擴展模塊。
根據Python 文檔 ,模塊方法表應這樣編寫:
static PyMethodDef SpamMethods[] = {
...
{"system", spam_system, METH_VARARGS,
"Execute a shell command."},
...
{NULL, NULL, 0, NULL} /* Sentinel */
};
但是我看到有些開發人員是這樣寫哨兵的:
static PyMethodDef SpamMethods[] = {
...
{"system", spam_system, METH_VARARGS,
"Execute a shell command."},
...
{} /* Sentinel */
};
我的問題是以下使用縮短版本會有風險嗎?
用{}
初始化的Pod類的字段未明確設置為零。
如果我懷疑PyMethodDef
是pod(純舊數據),則{NULL, NULL, 0, NULL}
會生成與{}
相同的數據。
在C和C ++中都是如此。
如果類PyMethodDef
在C ++ 11中是非Pod類,則{NULL, NULL, 0, NULL}
可以做的事與{}
不同,但是我強烈懷疑這種情況。
我唯一需要擔心的是,如果庫改變了我的身份,使PyMethodDef
成為非Pod,並選擇使{}
不將數據歸零。 我認為這不太可能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.