gpt4 book ai didi

c++ - 将nullptr QVariant与空QString进行比较在Qt5.9和Qt5.12中提供了不同的输出

转载 作者:行者123 更新时间:2023-12-01 14:43:54 28 4
gpt4 key购买 nike

当我更改Qt版本时,该程序会提供不同的输出:

#include <QDebug>
#include <QVariant>

int main()
{
QVariant value("");
qDebug() << value;
bool whatValue = QVariant::fromValue(nullptr) == value;
qDebug() << "*** value Check ***" << whatValue;
}
  • 在带有C++ 11的Qt 5.9中,输出为:

    QVariant(QString, "")
    *** value Check *** false
  • 在带有C++ 17的Qt 5.12中,输出为:

    QVariant(QString, "")
    *** value Check *** true

  • 为什么会得到不同的结果?

    最佳答案

    比较QVariant可能会很棘手,尤其是在它们的元类型不同的情况下,因为总是尝试在它们之间进行转换。在后一种情况下,比较返回true,因为Qt 5.12支持将QMetaType::Nullptr转换为QString,请参阅here,第511-513行。

    由于Qt 5.9中缺少这种情况,因此转换失败并且比较返回false。

    如果您对此行为不满意,则可以在自己的函数中强制执行元类型检查,例如:

    bool compareVariants(const QVariant & x, const QVariant & y)
    {
    if(x.type() == y.type())
    {
    return (x == y);
    }
    return false;
    }

    即仅针对相同的元类型退回到 QVariant::operator==,否则返回 false

    关于c++ - 将nullptr QVariant与空QString进行比较在Qt5.9和Qt5.12中提供了不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59260960/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com