小编rmp*_*251的帖子

C++ #if #elif #endif似乎不起作用

有人可以告诉我我做错了什么吗?

#include <iostream>
using namespace std;

int main() {

#define myvar B

#if myvar == A
        cout << "A" << endl;
#elif myvar == B
        cout << "B" << endl;
#else
        cout << "Neither" << endl;
#endif
}
Run Code Online (Sandbox Code Playgroud)

输出是A,但显然我期待B

c++ if-statement c-preprocessor preprocessor-directive

2
推荐指数
1
解决办法
3344
查看次数

带有递归的Python C API - 段错误

我在C++中使用python的C API(2.7)将python树结构转换为C++树.代码如下:

  • python树以递归方式实现为具有子列表的类.叶节点只是原始整数(不是类实例)

  • 我加载模块并从C++调用蟒方法,使用从代码这里,它返回树,python_tree的一个实例,作为一个++中的PyObject℃.

  • 递归遍历获得的PyObject.要获得孩子的名单,我这样做:

    PyObject* attr = PyString_FromString("children");
    PyObject* list = PyObject_GetAttr(python_tree,attr);
    for (int i=0; i<PyList_Size(list); i++) {
        PyObject* child = PyList_GetItem(list,i); 
        ...
    
    Run Code Online (Sandbox Code Playgroud)

非常简单,它可以工作,直到我最终遇到分段错误,调用PyObject_GetAttr(Objects/object.c:1193,但我看不到API代码).它似乎发生在访问树的最后一个叶节点上.

我很难确定问题所在.使用C API进行递归是否有任何特殊注意事项?我不确定我是否需要使用Py_INCREF/Py_DECREF,或者使用这些函数.我并不完全理解API的工作原理.任何帮助深表感谢!

编辑:一些最小的代码:

void VisitTree(PyObject* py_tree) throw (Python_exception)
{
    PyObject* attr = PyString_FromString("children");
    if (PyObject_HasAttr(py_tree, attr)) // segfault on last visit
    {
        PyObject* list = PyObject_GetAttr(py_tree,attr);
        if (list)
        {
            int size = PyList_Size(list);
            for (int i=0; i<size; i++)
            {
                PyObject* py_child = PyList_GetItem(list,i);
                PyObject *cls = PyString_FromString("ExpressionTree");
                // check …
Run Code Online (Sandbox Code Playgroud)

python recursion segmentation-fault c-api

1
推荐指数
1
解决办法
873
查看次数

为什么RVO不会发生在赋值运算符中?(C++)

例:

A myfunction() { return A(); }
A a = myfunction(); // default ctor only (return value optimization)
a = myfunction(); // default ctor and operator=
Run Code Online (Sandbox Code Playgroud)

为什么编译器不能将新对象写入现有对象?我相信一个类的所有实例占用相同数量的(非动态)内存,所以我不明白为什么这会是一个问题.

c++ assignment-operator rvo

1
推荐指数
2
解决办法
535
查看次数

什么是 mqt_native_modules 以及如何处理它的崩溃

我正在使用 React Native (noob),我在 Android 上遇到了如下崩溃:

libc: Fatal signal 11 (SIGSEGV), code 1 (mqt_native_modu)
Run Code Online (Sandbox Code Playgroud)

这个模块是什么mqt_native_modu?它是核心反应本机库吗?

我在使用第三方库时遇到这些崩溃,否则通过 react native 在 Android 和 iOS 上都可以正常工作。所以我想知道:这只是 React Native 的问题(在这种情况下我不得不举手等待 Facebook 的修复)还是有其他一些可能的方法来解决它?

crash android segmentation-fault react-native

1
推荐指数
1
解决办法
2445
查看次数