小编Mat*_*tej的帖子

初始化struct值和字符串键的关联数组

(对于"D"编程语言)

我一直在努力尝试初始化一个具有struct元素的关联数组,并且应该可以通过字符串索引.我会从单独的文件中将其作为模块导入.

这是我想要实现的(它不起作用 - 我不知道这是否可能):

mnemonic_info[string] mnemonic_table = [
        /* name,         format,          opcode */
        "ADD": {mnemonic_format.Format3M, 0x18},
        ...

        /* NOTE: mnemonic_format is an enum type. */
        /* mnemonic_info is a struct with a mnemonic_format and an ubyte */
];
Run Code Online (Sandbox Code Playgroud)

请注意,这适用于可由整数索引的数组.

最理想的是,我希望在编译时对其进行评估,因为我不会改变它.但是,如果不可能的话,如果你告诉我在即时运行时/之前构建这样一个数组的最佳方法,我会很高兴的.

我需要这个,因为我正在写一个汇编程序.

我搜索了SO和互联网的答案,但只能找到整数的例子,以及其他我不理解或无法工作的东西.

到目前为止我真的很喜欢D,但由于网上没有很多教程,所以我觉得很难学.

谢谢!

旁注:是否可以将元组用于关联数组元素而不是自定义结构?

编辑

到目前为止我找到了一种方法,但它非常难看:

mnemonic_info[string] mnemonic_table;
static this() { // Not idea what this does.
        mnemonic_info entry;

        entry.format = mnemonic_format.Format3M;
        entry.opcode = 0x18;
        mnemonic_table["ADD"] = entry;

        /* ... for all entries. */
}
Run Code Online (Sandbox Code Playgroud)

associative-array d initialization

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

C++和Qt:这是内存泄漏吗?(和一般问题)

在过去的两年里,我主要使用C进行编程(以前是一些Java),并决定使用Qt Creator和Qt库来学习C++.

我的问题是以下代码是否引入了内存泄漏:

    // filename is a QStringListIterator
    // dir is a QDir
    while (filename.hasNext()) {
            QString came_from_file(dir.filePath(filename.next()));
            QFile file(came_from_file);
            file.open(QFile::ReadOnly);
            file.readLine();
            while (!file.atEnd()) {
                    QString line(file.readLine());
                    do_something_with_stuff(line, came_from_file);
            }
    }
Run Code Online (Sandbox Code Playgroud)

具体来说,我不确定生成的dir.filePath(filename.next())QString 会发生什么.came_from_file一旦被复制,它是否被引用或指针丢失?它是否被"复制"(我认为它永远不会,直到更改,由于Qt容器的Copy-On-Write性质)?我应该用不同的方式写这个QString match = dir.file...吗?据我了解,这应该是平等的.

它还在Qt文档中说QFile将在析构函数中关闭()必要的文件.析构函数会被调用吗?变量确实"超出范围",但我仍然不确定这是否是所谓的RAII的情况.

我如何file指向不同的文件?

如果我将这样的变量传递给函数(我假设这是通过引用,因为函数do_something...是以这种方式定义的),然后它们超出范围,但是被函数插入到QHash/QMap/QSet中,会发生什么?他们被删除了,容器变得疯狂,还是有一些像ref那样花哨的小方案.在这一切背后算吗?或者只是简单地复制了这些值?

我之前已经意识到类似的问题,但我似乎无法通过阅读它们来解释这个问题,因为它们似乎是不同的情况.

如果代码或我的理解有问题,请纠正我.:)

谢谢,南蒂尔

c++ qt memory-leaks raii

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

标签 统计

associative-array ×1

c++ ×1

d ×1

initialization ×1

memory-leaks ×1

qt ×1

raii ×1