C++ 11标准(ISO/IEC 14882:2011)在§ C.1.1:
char* p = "abc"; // valid in C, invalid in C++
Run Code Online (Sandbox Code Playgroud)
对于C++来说,没关系,因为指向String Literal的指针是有害的,因为任何修改它的尝试都会导致崩溃.但为什么它在C中有效?
C++ 11还说:
char* p = (char*)"abc"; // OK: cast added
Run Code Online (Sandbox Code Playgroud)
这意味着如果将强制转换添加到第一个语句,它将变为有效.
为什么转换使第二个语句在C++中有效?它与第一个语句有什么不同?它不是仍然有害吗?如果是这样的话,为什么标准说它没关系?
我一直在努力学习如何为Python编写C扩展,并希望确定我理解PyArg_ParseTupleAndKeywords的工作原理.
我相信第一个参数是一个PyObject指针,它指向一个参数数组,这些参数按照它们传递的顺序传递给C-extension函数.第二个参数是传递的关键字列表,它们被传递的位置,以及非常可能的某种指示标记,告诉关键字开始和位置变得无关紧要.
然后,PyArg_ParseTupleAndKeywords使用其关键字列表(第四个参数)来映射用关键字指定的参数,以及格式字符串(第三个参数)和应该复制适当值的C变量(第五个和+参数)的地址.
我的理解是否正确?当我阅读在线文档时,我所看到的只是对"位置参数和关键字参数"的引用,这让我感到有些不知所措.处理PyArg_ParseTupleAndKeywords的Python解释器的文件在哪里?