如何定义 qreal 文字

How to define a qreal literal

在 Qt 文档中它说 qreal

Typedef for double unless Qt is configured with the -qreal float option.

这基本上意味着几乎总是 double 但在 ARM 设备上 float

我想使用 qreal 文字,但是我不知道怎么写。

qreal someValue = calcFunc();
qreal min = qMin(someValue, 0.0);

其中 0.0double 文字,0.0ffloat 文字。在 ARM 上,这是一个编译错误,因为没有 qMin(float, double) 函数。

我可以写 static_cast<qreal>(0.0) 但这似乎过于冗长。

那么如何定义 qreal 文字?

你可以使用 C++11 user defined literals:

#include <QtCore>

constexpr qreal operator "" _qr(long double a){ return qreal(a); }

int main() {
   qreal a = 3.0_qr;
   Q_ASSERT(qMin(a, 4.0_qr) == a);
}

如果它们在您的平台上不可用,您可以在需要时显式构建 qreals:

using _qr  = qreal;

int main() {
   qreal a = _qr(3.0);
   Q_ASSERT(qMin(a, _qr(4.0)) == a);
}