【发布时间】:2023-01-27 22:48:50
【问题描述】:
我刚刚从双精度创建了一个 qstring,但我放错了括号。它确实编译并且 QString 在我的电脑上很好,但是这个字符串在我在我朋友的电脑上生成的“1500 m”字符串前面添加了很多垃圾数据。
我的问题是:此代码行中实际发生了什么。为什么它不产生编译器错误?
double distance = 1500;
QString distanceString = QString("%1 m").arg(QString::number(distance), 'f', 1);
没有编译器错误,并且在不同的计算机上有不同的行为。
【问题讨论】:
-
你用一些奇怪的值调用
QString::arg(const QString &a, int fieldWidth, QChar fillChar) -
好吧,问题是,因为我放错了括号 'f' 并且 1 是 Qstring.arg 调用的一部分,而不是 QString::number 调用。
-
是的,它大概会做
arg调用会做的事情。这里违反直觉的部分是'f'隐式转换为int而1隐式转换为char(这是一些不可打印的 ASCII 字符)。 -
所以这不是编译器错误,因为使用 3 个参数调用
arg在技术上是有效的,因为值都可以转换为参数类型。 -
@perivesta,你应该把它写下来作为答案。