小编dua*_*ane的帖子

一个好的ocaml解析器?

我正在寻找一个好的ocaml解析库,它不是flex/bison的衍生物.理想情况下,我想要一个沿着parsec行的monadic组合库,但我找不到任何东西.

我会使用haskell,但为haskell制作llvm绑定比我原先想象的更加烦人.

干杯,

杜安

parsing ocaml parsec

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

(避免使用)C++中的复制机制

可能重复:
为什么不允许复制构造函数和赋值运算符?

我正在从一个坚实的C背景学习C++,并且急于避免我从reddit和黑客新闻中收集到的以前C++的错误,我一直在使用Google C++样式指南和LLVM的源代码作为我自己的参考码.突出的一点是项目使用以下代码.以下内容取自LLVM的include/Support/MemoryBuffer.h:

MemoryBuffer(const MemoryBuffer &); // DO NOT IMPLEMENT
MemoryBuffer &operator=(const MemoryBuffer &); // DO NOT IMPLEMENT
Run Code Online (Sandbox Code Playgroud)

谷歌回应了这种用法.显然,禁用这些"复制构造函数"是一件好事.

所以我的问题是:为什么这些东西如此可怕,并且(如果它们没有防范)它们的用途是什么样的,它在代码中会产生什么影响?

c++

8
推荐指数
2
解决办法
366
查看次数

在移动/复制c ++对象实例时

我试图在C++中创建一个类型不可知的向量,它由两个东西区分.首先,它在对象本身中分配内存,至少在某个点之前,而不是在堆上维护实际的对象数组.其次,它不能使用C++的复制/分配构造函数,这似乎会减慢代码速度并且不是必需的.

在查看我在计算机上维护的代码库时,我在LLVM的代码库中找到了一个类,它非常完美地描述了我正在寻找的内容:SmallVector.h.作为C++的新手,我不完全确定为什么会做出一些设计决策.例如,为什么分配数组U而不是T?评论给出了一个线索:

如果T有一个ctor或dtor,我们不希望它自动运行,所以我们需要将空间表示为其他东西.一个char数组可以很好地工作,但可能没有充分对齐.相反,我们为空间使用了一些联合实例,这保证了最大的对齐.

U当然,指的是以下联盟:

union U {
    double D;
    long double LD;
    long long L;
    void *P;
} FirstEl;
Run Code Online (Sandbox Code Playgroud)

所以,我想,这是我真正的问题:为什么要分配一个T暗示构造函数/析构函数被调用的数组?有没有办法在不调用这些构造函数/析构函数的情况下移动c ++对象实例,即进出向量?我想我可以使用LLVM的SmallVector实现,但我讨厌使用代码而不理解它.

最好的,杜安

c++

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

标签 统计

c++ ×2

ocaml ×1

parsec ×1

parsing ×1