通过加入现有的 QHash 来初始化 const QHash

Posted

技术标签:

【中文标题】通过加入现有的 QHash 来初始化 const QHash【英文标题】:Initializing const QHash by joining with an existing QHash 【发布时间】:2018-05-23 16:26:00 【问题描述】:

在我的项目中,我需要几个常量散列容器,它们是在类和函数之外定义的,因此是全局的。这样,其中一些容器应该重叠。对于列表,我将执行以下操作以将第二个 const 列表与第一个 const 列表结合起来:

const QList<QString> data1(
     "one",
     "two",
     "three"
 );

const QList<QString> data2 =
     data1 + 
     QList<QString>(
        "four",
        "five"
     );

但这不适用于 QHash,因为它们没有 + 运算符。相反,它们有unite 成员函数,但我不能使用它,因为容器是const。所以我想要的是这样的:

const QHash<QString,int> hash1
    "one", 1,
    "two", 2,
    "three", 3
;

const QHash<QString,int> hash2 = 
    hash1 +
    QHash<QString,int>(
    "four", 4,
    "five", 5
);

const QHash<QString,int> hash2(
    "four", 4,
    "five", 5
).unite(hash1);

【问题讨论】:

【参考方案1】:
const QHash<QString,int> hash2 = QHash<QString,int>
    "four", 4,
    "five", 5
.unite(hash1);

短一点

const auto hash2 = QHash<QString,int>
    "four", 4,
    "five", 5
.unite(hash1);

如果您记得operator+ 是如何扩展的,那么您就会明白unite 的调用或operator+ 的调用在语法上是相同的。

const QList<QString> data2 =
     data1.operator+(
     QList<QString>(
        "four",
        "five"
     ));

【讨论】:

以上是关于通过加入现有的 QHash 来初始化 const QHash的主要内容,如果未能解决你的问题,请参考以下文章

QHash 在不同的 qt 版本中表现不同

在类中初始化 QHash

通过带有成员函数指针的 QHash 调用成员函数的正确方法

尝试使用 const 初始化变量时出现错误“初始化元素不是常量”

Git 基础

const与引用。