小编And*_* R.的帖子

struct to/from std :: tuple conversion

假设我有struct和std::tuple同类型的布局:

struct MyStruct { int i; bool b; double d; }
using MyTuple = std::tuple<int,bool,double>;
Run Code Online (Sandbox Code Playgroud)

是否有任何标准化的方式来相互投射?

PS我知道琐碎的内存复制可以解决这个问题,但它依赖于对齐和实现

c++ c++17

11
推荐指数
4
解决办法
4735
查看次数

gcc的__builtin_cpu_supports检查OS支持吗?

GCC编译器提供了一组内置函数来测试某些处理器功能,例如某些指令集的可用性.但是,根据这个线程,我们也可能知道操作系统可能无法启用某些cpu功能.所以问题是:__builtin_cpu_supports内在函数还检查操作系统是否启用了某些处理器功能?

c gcc simd instruction-set intrinsics

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

python脚本完成后清理所有c ++对象

我有一个应用程序,实现python解释器,自定义python模块,导出类.示例c ++类可能如下所示:

class MyClass {
    MyClass() { cout << "created" << endl; }
    ~MyClass() { cout << "destroyed" << endl; }
};
Run Code Online (Sandbox Code Playgroud)

执行python脚本的代码如下所示:

namespace bp = boost::python;
bp::dict dict;

try {
    dict = bp::dict(bp::import("__main__").attr("__dict__"));
    bp::exec_file(filename, dict, dict);
} catch (bp::error_already_set &) {
    // dict.clear()
    PyErr_Print();
    PyErr_Clear();
}
Run Code Online (Sandbox Code Playgroud)

问题是,在脚本被异常终止后,不会立即销毁从python代码创建的c ++对象.例如,简单的脚本运行两次:

import MyModule
myobj = MyModule.MyClass()
assert False
Run Code Online (Sandbox Code Playgroud)

输出我得到(A):

// script launched first time
created
// script finished
// script launched second time
created
destroyed
// script finished
// Py_Finalize() …
Run Code Online (Sandbox Code Playgroud)

c++ python boost boost-python

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

#if defined(token)&& token == ... - 这种语法合法吗?

假设我有这样的代码:

#if defined(SOMEDEF) && SOMEDEF >= 5
  // ...
#endif
Run Code Online (Sandbox Code Playgroud)

基本上,SOMEDEF可能没有定义但是在运算符的抑制分支中使用&&.GCC接受此代码,但根据标准是否合法?所有编译器都支持这个吗?

c++ c-preprocessor

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